一、文件系统简介

        文件系统是操作系统用于明确 磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件文件存储空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

1、对文件操作的实际意义

文件被删除:inode被标记为空闲,此inode指向的磁盘块被标记为空闲;如果inode被引用了多次,且此次删除未使得其引用计数降低为的话,这意味着文件被删除仅删除了一个访问路径;

文件复制:创建一个新文件,并原文件中数据在新文件指向的磁盘块中再写一次的过程;

文件移动:在同一个分区移到:移动文件仅是改变了文件访问路径;跨分区移到:在新分区创建文件,把数据复制过去,删除原分区数据;

2、Linux的文件系统的类型:

ext(2,3,4), xfs, ffs, ufs, reiserfs, jfs, vfat(fat32), ntfs
交换文件系统:swap
网络文件系统:nfs, smbfs(cifs)
分布式文件系统:ceph
光盘文件系统:isso9660
btrfs,

二、linux分区的创建

1、物理意义
硬盘分区:
磁道:track
扇区:sector
柱面:cylinder:
分区根据柱面划分
MBR:Master Boot Record
主引导记录
512Bytes: 引导启动OS
446bytes: 程序,bootloader
64bytes: 分区表,每16bytes标记一个分区,一共4分区
2bytes: 5A, MBR有效性标记
1T: 3主+1扩展(切割1个或多个逻辑)
2、逻辑分区意义
分区创建基本命令
查看:fdisk -l [DEVICE]...
创建分区:fdisk [DEVICE]
交互式界面,有许多子命令
p: 显示磁盘分区表
n: new,新建分区
d: delete,删除分区
t: 修改分区的系统ID
l: 列表出所有已经的系统ID
w: 保存并退出
q: 不保存退出
[root@localhost ~]# fdisk /dev/sdb

 
Command (m for help): n    创建主分区

Command action

   e   extended       逻辑分区

   p   primary partition (1-4)     主分区

p

Partition number (1-4): 1    第一个分区

First cylinder (1-2610, default 1):  开始块

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +6G   划分6g容量

 
Command (m for help): t     修改文件类型

Selected partition 1

Hex code (type L to list codes): 8e   文件类型(Linux LVM)

Changed system type of partition 1 to 8e (Linux LVM)

 
Command (m for help): p     查看分区

 
Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xba762e8d
   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         393     6156741   8e  Linux LVM    分区总的信息

3、让内核读取到分区信息
对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表:
CentOS 5:
# partprobe [DEVICE]
CentOS 6:
partx -a [DEVICE]
kpartx -af  [DEVICE]
4、链接文件
创建链接:
ln [-sv] SRC DEST
        硬链接:
不能对目录文件创建硬链接;
硬链接不能跨分区
创建硬链接会增加inode引用计数
        符号链接:
可以对目录创建
不受分区限制
对文件创建符号链接不会增加引用计数
[root@dingchao tmp]# ln zip.sh /   创建一个硬链接
[root@dingchao tmp]# ls -li      查看inode节点
1179963 -rw-r--r--  2 root root    0 Jul 12 00:00 zip.sh
[root@dingchao /]# ls -li
1179963 -rw-r--r--  2 root root    0 Jul 12 00:00 zip.sh    inode节点相同
创建软连接
[root@dingchao tmp]# ln -s zip.sh /etc        创建软连接
[root@dingchao tmp]# ls -al                   查看文件
-rw-r--r--   2 root root    0 Jul 12 00:00 zip.sh   源文件
[root@dingchao tmp]# cd /etc
[root@dingchao etc]# ls -al
lrwxrwxrwx    1 root root      6 Jul 12 10:17 zip.sh -> zip.sh    目标链接文件
5、创建文件系统:
mkfs : make file system
-t FSTYPE [DEVICE]
               mkfs -t FSTYPE = mkfs.FSTYPE
       mkfs -t ext4 = mkfs.ext4
注意:CentOS

Linux内核是模块化的,这些模块支持动态装载和卸载;

        文件系统可能会被直接打包进内核,也可以被编译成内核模块;

6、文件格式化

           mke2fs:
-t {ext2|ext3|ext4}:指定文件系统 
-b {1024|2048|4096}:指定块大小
-L LABEL: 打标
-j: 相当于 -t ext3
-i #: 每多少字节给创建一个inode,此字节数不应该少小块大小
-N #: 直接指定可用的inode数;
-m #: 指定预留空间占整个分区空间的百分比;默认为5;
                  -O:指定分区特性

                                  物理磁盘结构示意图

 linux       文件系统_文件系统

7、文件系统挂载

文件系统挂载:默认只有管理员才有权限

将额外的分区与根文件系统上的某目录建立关联关系的过程;

目录中的原有文件会被隐藏

挂载点:另一个文件系统的访问入口

挂载: mount DEVICE MOUNT_POINT

固定挂载点:/mnt, /media

mount [option]... [-t fstype] [-o option]  设备  挂载点
挂载点:
1、事先存在;
2、使用空闲目录;
常用的挂载选项:
-t fstype:指定文件系统类型
-r: readonly, 只读挂载
-w: read and write, 读写挂载
-L LABEL:以卷标方式指定设备, mount -L MYDATA 挂载点
-U UUID: 以UUID的方式指定设备,mount UUID='uuid' 挂载点, mount -U uuid 挂载点
-a: 自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备
-n: 挂载时,不更新/etc/mtab文件
-o option: 
async:异步I/O,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中
sync: 同步I/O,
atime/noatime: 文件和目录被访问时是更新最近一次的访问时间戳
auto/noauto:设备是否支持mount的-a选项自动挂载
diratime/nodiratime: 目录被访问时是更新最近一次的访问时间戳
dev/nodev: 是否支持在此设备上使用设备;
exec/noexec: 是否允许执行此设备上的二进制程序文件
suid/nosuid: 是否支持在此设备的文件上使用suid
remount: 重新挂载,通常用于不卸载的情况下重新指定挂载选项
ro: 只读
rw: 读写
user/nouser: 是否允许普通挂载此文件设备
acl: 在此设备是支持使用facl,默认不支持;
[root@localhost ~]# mount /dev/sdb1 /tmp/mnt      挂载设备sdb1到/tmp/mnt目录下