Linux 常用命令-文件系统相关命令
- Linux 文件系统特性:
- Ext2 文件系统:
Ext2 文件系统在格式化的时候基本上是区分为多个区块群组(block group), 每个群组有独立的 inode/block/superblock 系统. 区块群组由六个部分组成:
- data block(数据区块):
data block 是用来放置文件内容数据地方. 在 Ext2 文件系统中所支持的 block 大小有 1K, 2K及4K 三种. 在格式化时 block 大小就固定好了, 且每个 block 都有编号, 以方便 inode 的记录.
- inode table (inode 表格):
- inode 记录信息:
- 该文件的存取模式
- 该文件的拥有者与群组
- 该文件的容量
- 该文件创建或状态改变的时间
- 最近一次的读取时间
- 最近修改的时间
- 定义文件特性的旗标
- 该文件真正内容的指向
- inode 特点:
- 每个 inode 大小均固定为 128 Bytes
- 每个文件仅占用一个 inode
- 文件系统能够创建的文件数量与 inode 的数量有关
- 系统读取文件时需要先找到 inode, 并分析 inode 所记录的权限与使用者是否符合, 若符合才能够开始读取 block 的内容.
- Superblock(超级区块): Superblock 大小为 1K, Superblock 记录整个文件系统相关信息, 可以使用
dumpe2fs
命令查看其信息:
- block 与 inode 的总量
- 未使用与已使用的 inode/block 数量
- block 与 inode 的大小 (block 为 1, 2, 4K, inode 为 128Bytes 或 256Bytes)
- 文件系统的挂载时间, 最近一次写入数据的时间, 最近一次检验磁盘的时间
- 一个 valid bit 数值, 若文件系统已被挂载, 则 valid bit 为 0, 反之, 为 1.
- Filesytem Description(文件系统描述说明):
描述每个 block group 的开始与结束的 block 号码, 以及说明每个区段分别介于哪一个 block 号码之间.
- block bitmap(区块对照表):
记录区块使用状态.
- inode bitmap(inode 对照表):
记录 inode 使用状态.
- XFS 文件系统:
- 数据区 (data section):
数据区分为多个存储区群组 (allocation groups) 来放置文件系统所需要的数据. 每个存储区群组包含了:
- 整个文件系统的 superblock
- 剩余空间的管理机制
- inode 的分配与追踪
inode 与 block 都是系统需要用到时, 才动态配置产生.
- 文件系统活动登陆区(log section):
记录文件系统的变化, 知道变化完整的写入到数据区后, 该笔记录才会被终结.
- 实时运行区(realtime section):
当有文件要被创建时, xfs 会在这个区段里面找到一个到数个的 extend 区块, 将文件放置在这个区块内, 等到分配完毕后, 在写入到 data section 的 inode 与 block 去.
xfs 文件系统可以使用 xfs_info
命令查看 superblock 信息.
- df du 命令:
- df 命令: 列出文件系统的整体磁盘使用量
- -a: 列出所有文件系统
- -k: 以 KBytes 的容量显示各文件系统
- -m: 以 MBytes 的容量显示各文件系统
- -h: 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
- -T: 显示该分区的文件系统类型
- -i: 不是以磁盘容量, 而以 inode 的数量来显示
df 命令读取的范围主要是在 superblock 内的信息.
- du 命令: 评估目录所占容量
- -a: 列出所有的文件与目录容量
- -h: 以人们较易读的格式显示
- -s: 列出总量
- -S: 列出目录下的总计, 但不包括子目录
- lsblk 命令:
- 参数含义:
- -d: 仅列出磁盘本身, 并不会列出该磁盘的分区数据.
- -f: 列出该磁盘内的文件系统名称.
- -m: 输出该设备在 /dev 下面的权限数据.
- -p: 列出该设备的完整文件名.
- -t: 列出该磁盘设备的详细数据.
- 输出信息含义:
- NAME: 设备文件名.
- MAJ:MIN: 主要:次要设备代码.
- RM: 是否为可卸载设备.
- SIZE: 容量.
- RO: 是否为只读设备.
- TYPE: 是磁盘, 分区还是只读存储器.
- MOUNTPOINT: 挂载点.
- blkid 命令:
- 列出设备的 UUID 等参数:
Linux 会将系统内所有的设备都给予一个独一无二的识别码, 这个识别码可以拿来作为挂载或者是使用这个设备/文件系统之用了.
- parted 命令:
- 列出磁盘的分区表类型与分区信息:
- 示例:
parted /dev/sda print
- gdisk和fdisk 命令:
MBR 分区表请使用 fdisk 分区, GPT 分区请使用 gdisk 分区.
因为 Linux 此时还在使用这颗磁盘, 分区表并没有被更新. 此时可以使用partprobe -s
更新分区表.
- mkfs.xfs mkfs.ext4 命令:
- 参数含义:
- -b: 后接 block 容量.
- -f: 强制格式化.
想要知道系统支持哪种文件系统的格式化功能, 直接按 Tab 键.
- xfs_repair fsck.ext4 命令:
- xfs_repair:
- -f: 后面的设备其实是个文件而不是设备.
- -n: 单纯检查并不修改文件系统的任何数据.
- fsck.ext4:
- -f: 强制检查. fsck 没有发现任何 unclean 的旗标不会主动进入细部检查的/
- -D: 针对文件系统下的目录进行最优化配置.
- -b: 后接 superblock 的位置. superblock 受损后可以指定文件系统备份的 superblock 来救援.
- mount umount命令:
- mount: mount 命令可以使用设备名或 UUID 来进行挂载
- 使用设备名挂载:
mount /dev/sda1 /home/study
- 使用 UUID 挂载:
mount UUID="06d699ec-4bd3-4849-a050-32b666506076" /home/study
- umount:
- -f: 强制卸载
- -l: 立刻卸载文件系统
- -n: 不更新
/etc/mtab
情况下卸载
- 特殊设备 loop 挂载:
- 创建大文件:
dd if=/dev/zero of=/srv/loopdev bs=1M count=512
- 格式化大文件:
mkfs.xfs -f /srv/loopdev
- 挂载大文件:
mount -o lopp /srv/loopdev /mnt
通过挂载大文件的方式可以扩展分区
- mkswap swapon swapoff命令:
- mkswap: 创建 swap 格式分区
- swapon: 启动 swap 分区
- swapoff: 关闭 swap 分区
- 参考:
[1] : 鸟哥的Linux私房菜