Linux磁盘和文件系统管理
一.Linux磁盘管理:
1.磁盘的物理组成部分(这里介绍的主要是机械硬盘)
a.磁盘的组成主要有:
盘片,机械手臂和磁头,主轴马达
b.磁盘的数据存储和读取在于磁盘的盘片,在盘片上的一些概念:
扇区(sector):就是将盘片划分成若干个扇区。扇区是最小的存储单位,每个扇区512个字节。
柱面(Cylinder):磁盘是有多个盘片组合而成,而柱面是有不在同一磁盘上的相同位置上的扇区组成。柱面是分区的最小单位,也就是分区是根据柱面分区的。
c.第一个扇区的组成:
有446个字节的MBR,64字节的分区表和2字节Mgical Number 组成。
其中446字节的MBR主引导分区,引导开机程序。
64字节的分区表中16个字节标志一个分区,所以分区的时候最多有4个主分区,
2字节Mgical Number:编辑MBR是否有效
2.磁盘接口类型:
磁盘接口类型从整体角度上讲:硬盘接口分为IDE、SATA、SCSI、光纤通道和SAS五种。SCSI接口得到硬盘主要应用于服务器市场,而光纤通道只在高端服务器上。
并口的磁盘接口:
IDE:速率:133M/s
SCSI:640M/s 主要用户小型计算机系统接口(Small Computer System Interface)
串口的磁盘接口:
SATA:6Gbps 串口硬盘(serial ATA)
SAS:6Gbps (serial attached SCSI) 串行连接SCSI
USB:480MB/s
3.磁盘设备的设备文件的命名与设备文件
/dev/hd:IDE
/dev/sd[a-z] :SCSI,SATA,SAS,USB
设备文件:
块设备:block,存取单位为块,比如磁盘
字符设备:char,存取单位为字符,比如键盘
设备文件:关联至一个设备驱动,进而能够与之对应的硬件设备通信。
设备号:
主设备号:标志一个设备。
此设备号:标志在同一个设备类型下的不同设备。
二.Linux文件系统管理:
个人理解:一个可以被挂载的数据为一个文件系统。
Linux中的文件系统有:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,ramfs,swap,光盘中iso9660
Windows中的文件系统有:fat32,fat,ntfs
Unix支持的文件系统:FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph,moosefs,mogilefs,Glusterfs,Lustre
Linux中的文件系统:
xfs,(由SGI开发的先进的日志文件系统,支持超大容量文件)
btrfs,目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。
reiserfs, 基于平衡树结构的文件系统
jfs,IBM的AIX使用的日志文件系统
ramfs:内存文件系统,速度很快
Linux的虚拟文件系统:VFS
在linux中有众多的文件系统,但是linux kernel是如何识别和管理这些文件系统的呢?其实linux系统中是通过虚拟文件系统(vritual Filesystem Switch,VFS)的功能读取文件系统的。也可以这样理解linux虚拟文件系统是众多文件系统与内核联系的接口。
1.磁盘的分区:
在linux上对一个磁盘的分区要用到fdisk,partx,sfdisk命令。磁盘分区是以磁盘柱面为单位进行分区的。分区步骤如下:
1.fdisk DEVICE_NAME (要进行分区的磁盘)
2.执行这个命令后,将会进入交互式,根据提示进行相应的分区:
Command (m for help):
常用的选项有:
n add a new partition:创建新分区
p print the partition table:打印已有分区
d delete a partition:删除已有分区
m print this menu:获取帮助
l list known partition types:列表所分区id
t change a partition's system id:调整分区id
w write table to disk and exit:写入并退出
q: quit, 放弃更新并退出
3.产看内核是否已经识别新的分区:cat /proc/partations
4.通知内核重新读取硬盘分区表:
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE
CentOS 5中使用partprobe来让内核读取硬盘分区表
partprobe [/dev/DEVICE]
2.创建文件系统(格式化):
创建分区之后,就要对相应的分区创建文件系统了,也就是格式化分区。
创建文件系统的命令有:mkfs,mke2fs,mkswap
1.mkfs命令:
(1).# mkfs.FS_TYPE /dev/DEVICE
FS_TYPE :ext3,ext4,xfs,btrfs,vfat
(2) # mkfs -t FS_TYPE /dev/DEVICE
选项:-L ‘LABEL’ :设定卷标
2.mke2fs命令:ext系列文件系统专用工具:
常用选线:
-t {ext2|ext3|ext4}:指定文件系统
-b {1024|2048|4096}:指定块大小
-L ‘LABEL’:指定卷标
-j:格式化成ext3 文件系统
-i #:指定数据空间中每多少个字节创建一个iNode;此大小不应小于块大小;
-N #:为数据空间创建多少个iNode
-O FEATURE[,...]:启用给指定特性
^FEATURE:关闭指定特性
3.mkswap命令:创建交换分区
mkswap [OPTIONS] device
-L ‘LABEL’:指定卷标
注意:格式化的分区是交换分区,要提前调整分区ID为82
3.管理文件系统的工具:
管理文件系统的工具有:blkid,e2label,tune2fs,dumpe2fs.
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
# e2label DEVICE [LABEL]
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L 'LABEL':修改卷标
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用
-o: 调整文件系统的默认挂载选项
-U UUID: 修改UUID号;
dumpe2fs:
-h:查看超级块信息
5.文件系统检测:
命令有:fsck和e2fsck
fsck: File System CheCk
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 自动修复错误
-r: 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes;
-f:强制修复;
6.Linux文件系统是如何运行:
在linux系统中文件和目录是由权限(rwx),属性(属主,属组,时间戳等)和数据组成。其中元数据(权限和属性)是存在inode中,而文件的数据是存放在date block中。还有一个超级块:这个超级块会记录整个文件系统的整个整体信息,包括inode和block数量,block和inode的大小,使用量和未使用量等等。
inode:记录一个文件的属性和权限,以及记录此文件的block编码,除了文件名以外,元信息都存在inode中
block:记录文件内容,如果文件太大时,会使用多个block。
inode bitmap:inode位视图:用来标记使用和未使用的inode号码
block bitmap:(块对照表):用来记录使用与未使用的block号码
文件系统新创建一个目录,会分配一个inode和至少一个block给该目录。
inode记录该目录的属性和权限,以及记录分配到的block号码。而block记录这个目录下的文件名和inode对照表。
目录占用的block记录的数据试图如下
查找一个文件的过程:首先会先找到该文件所在目录的inode号,根据inode号记录的block号码,去找到记录文件名和inode对照表的block。根据文件名和inode对照表中文件的block号码,从而找到文件的date block。假如我们查看目录/tmp/下的kk文件如下图:
软连接和硬链接
硬链接:
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问
不能够对目录进行
不能跨越分区进行
多个文件指向同一个inode的多个不同路径,创建文件的硬链接即为为inode创建性的引用路经,因此会增加起引用计数
创建硬链接:
ln SRC DEST
符号连接:
可以对目录进行
可以跨分区
指向的是一个文件路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
创建软连接:ln sv SRC DEST
6.挂载:
分区格式化之后就可以挂载使用这个分区了。
将额外文件系统与跟根文件系统某现存的目录建立起关联关系,进而使得其目录作为其他文件访问入口的行为称为挂载。
把设备关联挂载点:挂载点:Mount Point
卸载时:可以使用设备也可以使用挂载点,使用命令umount
假如在挂载点下有文件,则在挂在后挂载点中的文件将会被暂时隐藏
挂载方法:
mount:通过查看/etc/mtab文件显示当前系统一挂载的所有设备。
查看内核追踪到自己已挂载的所有设备:cat /proc/mounts
mount [fnrsvw] [-t vfstype] [-o OPTOION] DEVICE DIR
device :指明挂载设备:
(1)设备文件
(2)卷标:-L "LABEL"
(3)UUID,-U ‘UUID'
(4)伪文件系统:proc,sysfs,devtmpfs,configfs
dir:挂载点:
事先存在,最好使用空目录
正在使用中的设备是无法卸载的
常用选项:
-t vsftype:指定要挂载的设备上的文件系统类型
-r:readonly,只读挂载
-w:read and write:读写挂载
-n:不更新/etc/mtab文件 (但是在/proc/mounts能看到)
/etc/mtab
-a:自动挂载所有支持自动挂载的设备;(定义在/etc/fstab文件中,且挂载选项中有“自动挂载”功能)
-L:‘LABEL’ :一卷表指定挂载设备
-U;'UUID":
-B: --bind :绑定目录当另一个目录上
-o option:(挂载文件系统的选项)
async:异步模式;
sync:同步模式.数据安全性高,但是性能高
atime :
noatime :每次访问挂载点下的文件或目录时,访问时间戳是不会改变的
diratime:
nodiratime:每次访问挂载点下的目录时,访问时间戳是不会改变的
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上应用程序运行为进程
dev/nodev:是否支持在此文件系统使用设备文件
suid/nosuid:
remount:重新挂载。
ro:
rw:
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
卸载:
umount 挂载点或者挂载设备
查看正在访问挂载设备文件系统的程序进程:
fuser -v /MOUNT_POINT
终止正在访问挂载设备文件系统的程序进程
fuser -km /MOUNT_POINT
挂载交换分区:
启用:swapon
swapon [option]... [device]
-a;激活所有的交换分区
-p PRIORITY:指定优先级:
禁用:swapoff
至此一个磁盘经过分区,格式化,挂载之后用户就可以使用这个磁盘中的分区了。