Linux磁盘及文件系统管理
文件接口:open(), read(), write(), close()
设备类别:
块(block):随机访问,数据交换单位为“块”
字符(character):线性,数据交换单位为字符
设备文件:FHS(LSB)
/dev/: 设备
设备文件,关联至设备的驱动程序
设备号:
major:主设备号,区别设备类别,用于标明所需驱动程序
minor:次设备号,
磁盘设备文件:
IDE接口(ATA):并行, 133MB/s
两个IDE控制器:每个控制器可通过线缆接入两块磁盘,一主一从;
/dev/hd[a-z][#]
/dev/hda, /dev/hdb,
/dev/hdc, /dev/hdd
SCSI接口: 并行,Small Computer System Interface
UltraSCSI 320, 320MB/s
SATA接口:串行,Serial ATA,
6Gpbs
USB接口:串行,480MB/s
SAS接口:串行
设备文件:/dev/sd[a-z][#]
[a-z]:标记设备
[#]:磁盘分区
track: 磁道
sector: 扇区
cylinder: 柱面
寻道时间:平均寻道时间
MBR:0磁道0扇区,主引导扇区(master boot record)
三部分:
446bytes: bootloader,程序
64bytes: 分区表
16bytes:标记一个分区
4个主分区:3主,1扩展-->n逻辑分区
2bytes: 55AA, 当前MBR信息是否有效的标记;
分区标识方式:
主分区或扩展分区:1-4
逻辑分区:5+
fdisk命令:
1、查看已经识别的磁盘设备:
# fdisk -l /dev/[hs]d[a-z]
2、管理分区
# fdisk DEVICE
fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;
常用命令:
p: 显示现有分区表;
n: 创建新分区
d: 删除现有分区
t: 修改分区ID
l: 查看支持哪些分区ID
w: 保存退出
q: 不保存退出
m: 显示帮助信息
示例:/dev/sdb
3主+1扩展(3个逻辑)
2主+1扩展(4个逻辑)
查看内核是否已经识别新建分区:
# cat /proc/partitions
通知内核强制重读分区表:
CentOS 5: partprobe /dev/DEVICE
CentOS 6: partx, kpartx
partx -a /dev/DEVICE
kpartx -af /dev/DEVICE
注意:成功读取分区,可能需要命令重复执行2次或以上;
创建文件系统:
文件系统:
元数据:每个索引项称一个inode, (index node)
/var/logs/messages
根的inode --> 根目录对应的磁盘块 --> var对应的inode编号 --> 查inode table, 找到编号对应的inode --> var目录的磁盘块 --> logs 的inode编号 --> 查inode table, 找到logs目录的inode --> logs目录的磁盘块 --> 找到messages文件名对应的inode编号 -->查inode表,找到messages的inode编号对应的inode --> messages的磁盘块
链接文件:访问同一个文件数据不同路径
硬链接:两个文件路径指向了同一个inode;
创建方法:
# cp -l SRC DEST
# ln SRC DEST
特性:
(1) 目录不支持硬链接;
(2) 硬链接不能跨文件系统;
(3) 硬链接文件与原文件是指向同一个inode,创建硬链接文件会增加inode的引用计数;
符号链接:链接文件是一个完全独立的新文件,但其指向了原文件的文件路径;
特性:
(1) 符号链接文件与原文件是两个各自独立文件;
(2) 目录可以创建符号链接;
(3) 可以跨文件系统;
(4) 删除链接不影响原文件;但删除原文件,符号链接指向的文件路径将不复存在,因此,此时链接文件将变成失效的链接;
其大小并非真正原文件大小,而是指向的原文件的文件路径字符串所包含的字节数;
创建方法:
ln -s SRC DEST
bitmap索引
block group:
bitmap: inode, block
VFS: Virtual File System
Linux文件系统:ext2, ext3, ext4, reiserfs, xfs, btrfs
光驱:iso9660
网络文件系统:nfs, cifs
集群文件系统:gfs2, ocfs2
分布式文件系统:ceph
windows文件系统:ntfs, vfat
伪文件系统: tmpfs, hugepagefs, proc, sysfs
Unix的文件系统:FFS, UFS, JFS
交换文件系统:swap
文件系统管理工具:
创建文件系统
mkfs.ext2, mkfs.ext3, mkfs.xfs ...
检测文件系统
fsck.ext2, fsck.ext3, fsck.ext4, fsck.xfs .
查看其属性
dumpe2fs, tune2fs
创建文件系统:
mkfs.FSTYPE /dev/DEVICE
blkid /dev/DEVICE
mkfs -t FSTYPE /dev/DEVICE
ext系列:
Linux文件系统管理:
VFS:
日志文件系统:加速文件检测并修复的过程
ext3, ext4, xfs
非日志型文件系统:ext2
非一致性:
ext系列文件系统:mke2fs
mke2fs [OPTION]... /dev/DEVICE
-t {ext2|ext3|ext4}:指明要创建的文件系统类型
mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
-b {1024|2048|4096}:其上限由page frame决定
-L LABEL:指定要使用的卷标
-j: 相当于使用-t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 指明inode与字节的比率;即,每多少字节给创建一个inode;
-N #: 直接指明给此文件系统创建多少个inode
-m #:指定预留空间的百分比;默认为5;
-O [^]FEATURE
UUID: 全局惟一标识符
e2label:
查看:e2label /dev/DEVICE
设定卷标:e2label /dev/DEVICE LABEL
tune2fs:查看或修改ext系列文件系统的某些属性
查看超级块中的数据信息:
tune2fs -l /dev/DEVICE
修改指定文件系统的属性:
-j: ext2 --> ext3
-L LABEL: 修改卷标;
-m #: 调整预留空间的百分比;
-O [^]FEATURE: 开启或关闭某种特性
-o [^]mount_options: 开启或关闭某种默认挂载选项
-o acl
-o ^acl
dumpe2fs命令:显示ext系列文件系统属性信息
dumpe2fs [-h] /dev/DEVICE
文件系统检测:
因进程意外中止或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏;此时,应该修改修复文件系统;
注意:应该离线进行;
fsck:
-t FSTYPE
fsck -t FSTYPE = fsck.FSTYPE
-a:自动修复所有错误
-r: 交互式修复错误
ext系列文件系统的专用工具:
e2fsck
-y: 对所有问题自动回复为yes;
-f: 即使文件系统处于clean状态,也要强制进行检测;
Windows无法识别Linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:
# mkfs -t vfat /dev/DEVICE
swap文件系统:
Linux上交换空间必须使用独立的磁盘分区;
fdisk /dev/DEVICE
t命令调整其ID为82;
创建交换分区文件系统:mkswap命令
mkswap [-L LABEL] /dev/DEVICE
注意:在Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;
根文件系统:根关联到的分区
有一定的要求:FHS
其余所有的其它文件系统如果想要被访问,都只能够通过“关联”至根文件系统上的某个目录来实现;
这种操作即所谓的“挂载”,也即mount;相反动作,即卸载,命令为umount
挂载点:mount_point,即用于作为另一个文件系统访问入口的目录;
mount命令:
mount DEVICE MOUNT_POINT
挂载点
1、事先存在;
2、应该使用别的进程未使用的目录;
3、挂载点下原有的文件将被隐藏;
mount:将显示当前系统已经挂载的所有文件系统的相关信息;
mount [OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT
命令选项:
-r: 只读挂载
-w: read and write,读写挂载
-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;
-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE可省;
-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE可省;
-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);
-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件
示例:
# mount -U dea669ee-e769-46d9-86a8-88925a10278b /data/mydata
-o OPTION,挂载选项:
async:异步写入
sync:同步写入,即使用同步I/O;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在文中时是否更新其访问时间戳;
auto/noauto:设备是否支持mount命令使用-a选项时自动挂载;
dev/nodev:此设备上是否创建设备文件;
exec/noexec:是否允许执行此文件系统上的程序文件;
suid/nosuid:是否支持此设备上的文件上使用suid权限;
remount: 重新挂载;
acl: 支持使用facl;
# mount -o acl
# tune2fs -o acl /dev/DEVICE: 打开acl为默认挂载选项;
ro: 只读
rw: 读写
user/nouser: 是否允许普通挂载此文件系统
所有挂载选项均未指明时,其默认为:
defaults
Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
另外一个使用技巧:
将某目录绑定至指定目录下,作为临时访问入口;
mount --bind 源目录 目标目录
查看所有已经挂载设备的方法:
# mount
# cat /etc/mtab
# cat /proc/mounts
umount命令:
umount DEVICE
umount MOUNT_POINT
注意:正在被某进程访问的设备是不可以被卸载的;查看被什么进程所占用:
# lsof MOUNT_POINT
# fuser -v MOUNT_POINT
# fuser -km MOUNT_POINT: 终止正访问挂载点的进程;
df命令:
df [OPTION]... [FILE]...
-l: 仅显示本地文件系统的相关系统;
-h: 单位换算;
-i: 显示inode的使用情况而非磁盘块的;
du命令:
用于评估文件大小
-s: 统计整个目录及内部所有文件总体大小;
-h: human-readable
交换分区:
创建交换分区文件系统:mkswap
free命令:查看内存使用状况
-m
-g
启动交换分区:
swapon [OPTION] [DEVICE]
-a: 启用/etc/fstab文件中定义的所有交换分区
禁用交换分区:
swapoff DEVICE