contents
- 探索 Linux 文件系统
- 基本的 Linux 文件系统
- 日志文件系统
- 写时复制文件系统
- 操作文件系统
- 创建分区
- fdisk 命令分区过程
- 分区自动挂载与 fstab 文件修复
- 创建文件系统
- 文件系统的检测与修复
- 逻辑卷管理
- 逻辑卷管理布局
- Linux中的 LVM
- 使用 Linux LVM
探索 Linux 文件系统
Linux 支持多种类型的文件系统管理文件和目录,FAT32 和 exFAT 兼容 windows 和 linux。
- 分区 fdisk
- 格式化 mkfs
- 挂载 mount
- fdisk 与 mkfs 区别?
我猜测,fdisk 上显示的文件系统只是一个标识(备注),而非真正已被格式化,真正的文件系统格式化需要使用 mkfs 命令。
du -h xxx
查看文件的 disk usage。文件大小和文件所占磁盘空间大小不一样。
操作系统对文件分配磁盘空间,基本单位的扇区,实际会以多个扇区为一组(簇)为单位,也就是说,哪怕只有一个字节的文件,操作系统也会分配一个簇给它。簇的大小可调节。
jiaming@ubuntu:~/Documents/C_project$ stat ucf.c # 文件目录项中内容,在磁盘上的那个位置? Inode:
File: ucf.c
Size: 337 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 655411 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-05-20 15:07:28.115638706 +0800
Modify: 2021-05-20 15:07:17.831529901 +0800
Change: 2021-05-20 15:07:17.831529901 +0800
Birth: -
inode:
debugfs
:观察文件的扇区内容。
jiaming@ubuntu:~/Documents/C_project$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 956K 1 loop /snap/gnome-logs/81
loop1 7:1 0 55.5M 1 loop /snap/core18/1997
loop3 7:3 0 99M 1 loop /snap/core/11081
loop4 7:4 0 548K 1 loop /snap/gnome-logs/103
loop5 7:5 0 219M 1 loop /snap/gnome-3-34-1804/66
loop6 7:6 0 3.7M 1 loop /snap/gnome-system-monitor/127
loop7 7:7 0 162.9M 1 loop /snap/gnome-3-28-1804/145
loop8 7:8 0 276K 1 loop /snap/gnome-characters/570
loop9 7:9 0 2.2M 1 loop /snap/gnome-system-monitor/157
loop10 7:10 0 2.5M 1 loop /snap/gnome-calculator/884
loop11 7:11 0 4.2M 1 loop /snap/gnome-calculator/544
loop12 7:12 0 65.1M 1 loop /snap/gtk-common-themes/1515
loop13 7:13 0 276K 1 loop /snap/gnome-characters/708
loop14 7:14 0 160.2M 1 loop /snap/gnome-3-28-1804/116
loop15 7:15 0 55.4M 1 loop /snap/core18/2066
loop16 7:16 0 64.8M 1 loop /snap/gtk-common-themes/1514
loop17 7:17 0 99.2M 1 loop /snap/core/11167
sda 8:0 0 50G 0 disk
└─sda1 8:1 0 50G 0 part /
sr0 11:0 1 1024M 0 rom
jiaming@ubuntu:~/Documents/C_project$ tree
.
├── 0N9.c
├── 4gL.c
├── 5d8.c
├── 7QQ.c
├── 8W2.c
├── AL5.c
├── Bb2.c
├── Bb2.c~
├── C9e.c
├── file_read_write
│ ├── data.txt
│ ├── func.c
│ ├── result.txt
│ └── script.c
├── h1T.c
├── K6n.c
├── kMM
├── kMM.c
├── makefile
├── ml9.c
├── mMu.c
├── nq0.c
├── out
├── PS4.c
├── qrD.c
├── Sbz.c
├── script
├── ucf
├── ucf.c
├── WRa.c
├── x3p.c
├── x3p.c~
├── yC9.c
├── zQw.c
├── zQw.c~
└── ztm.c
1 directory, 35 files
文件系统链接.
基本的 Linux 文件系统
1. ext 文件系统
采用名为索引节点的系统来存放虚拟目录中所存储文件的信息。索引节点系统在每个物理设备中创建一个单独的表来存储这些文件的信息。存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。ext 文件系统名称中的 extended 部分来自其跟踪的每个文件的额外数据。
- 文件名
- 文件大小
- 文件的属主
- 文件的属组
- 指向存有文件数据的每个硬盘块的指针
2. ext2文件系统
ext2 文件系统扩展了索引结点表的格式来保存系统上每个文件的更多信息,为文件添加了创建时间值、修改时间值和最后访问时间值来帮助系统管理员。
ext2文件系统还将允许的最大文件大小增加到了 2TB。
该文件系统该更改了文件在数据块中的存储方式,减小了ext产生的文件碎片化问题。
保存文件时,ext2 文件系统通过按组分配磁盘块来减轻碎片化。
ext2文件系统容易在系统断电或崩溃时损坏的情况,即使文件数据正常保存到了物理设备上,如果索引节点表记录没完成更新的话,ext2文件系统甚至都不知道那个文件存在。
是 ext 文件系统的升级版本, RedHat Linux 7.2 版本以前的系统默认都是 ext2 文件系统。最大支持 16 TB 的分区和最大 2TB 的文件 。
日志文件系统
它不再使用之前先将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(日志),在数据成功写道存储设备和索引节点表之后,再删除对应的日志条目。
文件系统日志方法:
方法 | 描述 |
数据模式 | 索引节点和文件都会被写入日志,丢失数据风险低,但性能差 |
有序模式 | 只有索引节点会被写入日志,但只有数据成功写入后才删除,在性能和安全性之间取得了良好的折衷 |
回写模式 | 只有索引节点数据会被写入日志,但不控制文件数据何时写入,丢失数据风险高,但仍比不用日志好 |
1. ext3文件系统
使用有序模式的日志功能
无法恢复误删除的文件
没有内建的数据压缩功能
不支持加密文件
ext3文件系统是ext2文件系统的升级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
2. ext4文件系统
支持数据压缩和加密
还支持区段特性,在存储设备上按块分配空间,但在索引节点表中只保存起始块的位置。由于无需列出所有用来存储文件中数据的数据块,它可以在索引结点表中节省一些空间。
引入块预分配技术。
在性能、伸缩性和可靠性方面进行了大量改进。ext4的变换可以说是翻天覆地的。向下兼容 ext3,最大 1EB 文件系统和 16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用 barrier 等。centOS6.3默认文件系统。
3. Reiser文件系统
只支持回写日志模式。
可以在线调整已有文件系统的大小/
尾部压缩技术。
4. JFS文件系统
采用有序日志方法。
基于区段的文件分配。
5. XFS文件系统
采用回写模式的日志。
允许在线调整文件系统大小,只能扩大不能缩小。
写时复制文件系统
1. ZFS文件系统
2. Btrf文件系统
操作文件系统
创建分区
- 分区类型
主分区:总共最多只能分四个
扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
逻辑分区:逻辑分区是在扩展分区中划分的,如果是 IDE 硬盘,Linux 最多支持 59 个逻辑分区,如果是 SCSI 硬盘 Linux 最多支持 11 个逻辑分区。
可以通过创建一个扩展分区,然后在扩展分区内创建逻辑分区进行扩展。 - 分区表示方法
分区的设备文件名:
分区 | 路径 |
主分区 1 | /dev/sda1 |
主分区 2 | /dev/sda2 |
主分区 3 | /dev/sda3 |
扩展分区 | /dev/sda4 |
逻辑分区 1 | /dev/sda5 |
逻辑分区 2 | /dev/sda6 |
逻辑分区 3 | /dev/sda7 |
分区 | 路径 |
主分区 1 | /dev/sda1 |
主分区 2 | /dev/sda2 |
逻辑分区 1 | /dev/sda5 |
逻辑分区 2 | /dev/sda6 |
逻辑分区 3 | /dev/sda7 |
逻辑分区 4 | /dev/sda8 |
fdisk 命令分区过程
- 添加新硬盘
- 查看新硬盘
fdisk -l
- 使用 fdisk 命令分区
fdisk /dev/sdb
fdisk 交互式命令提示符使用单字母命令来告诉 fdisk 做什么。
命令 | 说明 |
a | 设置可引导标记 |
b | 编辑 bsd 磁盘标签 |
c | 设置DOS操纵系统兼容标记 |
d | 删除一个分区 |
l | 显示已知的文件系统类型 |
m | 显示帮助菜单 |
n | 新建分区 |
o | 建立空白DOS分区表 |
p | 显示分区列表 |
q | 不保存退出 |
s | 新建空白SUN磁盘标签 |
t | 改变一个分区的系统ID |
u | 改变显示记录单位 |
v | 验证分区表 |
w | 保存退出 |
x | 附加功能 |
- 重新读取分区表信息
分区创建完成后执行。
partprobe
- 格式化分区 —— 将数据块定义为指定大小(默认为4KB)、建立 inode 列表
扩展分区不能被格式化
mkfs -t ext4 /dev/sdb1
- 建立挂载点并挂载
mkdir /disk1
mount /dev/sdb1 /disk1/
使用 df 或是 mount 命令可以看到分区是否被正常挂载。
分区可以按主分区或扩展分区创建,主分区可以被文件系统直接格式化,而扩展分区则只能容纳其他主分区。
如果你想为其他文件系统创建一个分区,只要选择一个不同的分区类型即可。
存储设备的分区信息被写入分区表中,Linux 系统通过 ioctl()
调用来获知新分区的出现。设置好分区之后,可以使用 Linux 文件系统对其进行格式化。
分区自动挂载与 fstab 文件修复
- /etc/fstab 文件
分区设备文件名或UUID:挂载点:文件系统名称:挂载参数:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份:指定分区是否被fsck检测,0代表不检测,其他数字代表优先级,越小优先级越高。
- 分区自动挂载
vi /etc/fstab
# ...
/dev/sdb1 /disk1 ext4 defaults 1 2
mount -a
# 根据 fstab 文件进行自动挂载
如果文件出现报错,尝试开机时输入密码后执行 3。
- /etc/fstab 文件修复
mount -o remount,rw /
- 重启
创建文件系统
在将数据存储到分区之前,你必须用某种文件系统对其进行格式化,这样 Linux 才能使用它。 每种文件系统类型都用自己的命令行程序来格式化分区。
工具 | 用途 |
mkefs | 创建一个 ext 文件系统 |
mke2fs | 创建一个 ext2 文件系统 |
mkfs.ext3 | 创建一个 ext3 文件系统 |
mkfs.ext4 | 创建一个 ext4 文件系统 |
mkreiserfs | 创建一个 ReiserFS 文件系统 |
jfs_mkfs | 创建一个 JFS 文件系统 |
mkfs.xfs | 创建一个 XFS 文件系统 |
mkfs.zfs | 创建一个 ZFS 文件系统 |
mkfs.btrfs | 创建一个 Btrfs 文件系统 |
并非所有的文件系统工具都已经默认安装了,要知道某个文件系统是否可用,可以使用 type 命令。
为分区创建了文件系统之后,下一步就是将它挂载到虚拟目录下的某个挂载点,这样就可以将数据存储在新文件系统中了。
ls /mnt
sudo mkdir /mnt/my_partition
ls -al /mnt/my_partition/
ls -dF /mnt/my_partition/
sudo mount -t ext4 /dev/sdb1 /mnt/my_partition
ls -al /mnt/my_partition/
mkdir 命令在虚拟目录中创建了挂载点,mount 命令将新的硬盘分区添加到挂载点。mount 命令的 -t 选项指明了要挂载的文件系统类型(ext4)。现在你可以在新分区中保存新文件和目录了。
文件系统的检测与修复
fsck 命令能够检查和修复大部分类型的 Linux 文件系统。
fsck 命令使用 /etc/fstab 文件来自动决定正常挂载到系统上的存储设备的文件系统。如果存储设备尚未挂载,你需要使用 -t 命令行选项来指定文件系统类型。
filesystem:ext、ext2、ext4、ReiserFS、JFS、XFS
fsck options filesystem
选项 | 描述 |
-a | 如果监测到错误,自动修复文件 |
-A | 检查 /etc/fstab 文件中列出的所有文件系统 |
-C | 给支持进度条功能的文件系统显示一个进度条 |
-N | 不进行检查,只显示哪些检查会执行 |
-r | 出现错误时提示 |
-R | 使用 -A 选项时跳过根文件系统 |
-s | 检查多个文件系统时,依次进行检查 |
-t | 指定要检查的文件系统类型 |
-T | 启动时不显示头部信息 |
-V | 在检查时产生详细输出 |
-y | 检查到错误时自动修复文件系统 |
逻辑卷管理
为文件系统创建逻辑存储设备。
可以在无需重建整个文件系统的情况下,轻松管理磁盘空间。
逻辑卷管理布局
Linux中的 LVM
LVM2 提供的另外一些功能:
- 快照。允许在逻辑卷在线的状态下将其复制到另一个设备。保证复制的同时,关键任务的 Web 服务器或数据库服务器继续工作。
- 条带化。可跨多个物理硬盘创建逻辑卷。
- 镜像。实时更新的逻辑卷的完整副本。
使用 Linux LVM