练习 20:文件系统:修改和创建文件系统,tune2fs
,mkfs
- - 一种组织数据的方式,通过提供存储,检索和更新数据的过程,以及管理包含它的设备上的可用空间,数据预期在终止后保留。
- Inode - 索引节点是一种结构,存储文件系统对象(文件,目录等)的所有信息,除数据内容和文件名之外。
- 块 - 可以分配的最小块磁盘空间。它通常默认为 4096 字节,或 4 千字节。
- 日志 - 一种结构,允许文件系统跟踪什么时候写入了什么。这样可以快速了解在断电或类似问题时,未正确写入的内容。
接下来,让我给大家简要介绍文件系统的工作原理。为了按名称访问文件,Linux 内核将:
- 在包含该文件的目录中查找文件名。
- 获取文件 Inode 号。
- 通过 Inode 区域中的数字查找 Inode。
- 读取此 Inode 的数据块的位置。
- 使用这个位置在数据区域中从这个块读取文件。
现在,每个文件系统都有很多与之相关的选项。这些选项可以通过tune2fs
程序查看和更改。这是一个带注解的tune2fs -l /dev/sda8
的输出:
很可怕,是嘛?实际上你会发现,这个描述中只有几个参数实际上是有用的,它们是:
- 保留块数量。
- 最大挂载数。
- 检查间隔。
mkfs.ext3
- 创建一个ext3
文件系统。如果在具有现有文件系统的设备上执行此命令,则该文件系统将被销毁,因此请小心。mkfs.ext4
- 创建一个ext4
文件系统。这其实是相同的程序,尝试sudo find /sbin -samefile sbin/mkfs.ext3
。tune2fs
- 打印并更改文件系统参数。
现在,你将学习如何创建新的文件系统并修改其参数。
1: sudo -s
2: umount /tmp
3: blkid | grep /dev/sda8
4: mkfs.ext3 /dev/sda8
5: blkid | grep /dev/sda8
6: blkid | grep /dev/sda8 >> /etc/fstab
7: vim /etc/fstab
现在你必须将/tmp
那一行的 UUID。
替换为你添加到文件末尾的那个:
/dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE="ext2"
user1@vm1:~$ sudo -s
root@vm1:/home/user1# umount /tmp
root@vm1:/home/user1# blkid | grep /dev/sda8
/dev/sda8: UUID="869db6b4-aea0-4a25-8bd2-f0b53dd7a88e" TYPE="ext3" SEC_TYPE="ext2"
root@vm1:/home/user1# mkfs.ext3 /dev/sda8
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
62464 inodes, 249856 blocks
12492 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=255852544
8 block groups
32768 blocks per group, 32768 fragments per group
7808 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (4096 blocks): done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
root@vm1:/home/user1# blkid | grep /dev/sda8
/dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE="ext2"
root@vm1:/home/user1# vim /etc/fstab
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# / was on /dev/vda5 during installation
UUID=128559db-a2e0-4983-91ad-d4f43f27da49 / ext3 errors=re
# /home was on /dev/vda10 during installation
UUID=32852d29-ddee-4a8d-9b1e-f46569a6b897 /home ext3 defaults
# /tmp was on /dev/sda8 during installation
UUID=869db6b4-aea0-4a25-8bd2-f0b53dd7a88e /tmp ext3 defaults
# /usr was on /dev/vda9 during installation
UUID=0221be16-496b-4277-b131-2371ce097b44 /usr ext3 defaults
# /var was on /dev/vda8 during installation
UUID=2db00f94-3605-4229-8813-0ee23ad8634e /var ext3 defaults
# swap was on /dev/vda6 during installation
UUID=3a936af2-2c04-466d-b98d-09eacc5d104c none swap sw
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE
22,1 Bot
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# / was on /dev/vda5 during installation
UUID=128559db-a2e0-4983-91ad-d4f43f27da49 / ext3 errors=re
# /home was on /dev/vda10 during installation
UUID=32852d29-ddee-4a8d-9b1e-f46569a6b897 /home ext3 defaults
# /tmp was on /dev/sda8 during installation
UUID=53eed507-18e8-4f71-9003-bcea8c4fd2dd /tmp ext3 defaults
# /usr was on /dev/vda9 during installation
UUID=0221be16-496b-4277-b131-2371ce097b44 /usr ext3 defaults
# /var was on /dev/vda8 during installation
UUID=2db00f94-3605-4229-8813-0ee23ad8634e /var ext3 defaults
# swap was on /dev/vda6 during installation
UUID=3a936af2-2c04-466d-b98d-09eacc5d104c none swap sw
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
"/etc/fstab" 22L, 1277C written
root@vm1:/home/user1# mount /tmp
root@vm1:/home/user1# tune2fs -c 2 /dev/sda8
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 2
root@vm1:/home/user1# unmount /tmp
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda8: clean, 11/62464 files, 8337/249856 blocks (check in 2 mounts)
root@vm1:/home/user1# for ((i=1;i<=4;i++)); do mount /tmp ; umount /tmp ; cat /var/log/messages | tail -n 4 ; done
Jul 2 12:11:58 vm1 kernel: [21096.363787] kjournald starting. Commit interval 5 seconds
Jul 2 12:11:58 vm1 kernel: [21096.364167] EXT3 FS on sda8, internal journal
Jul 2 12:11:58 vm1 kernel: [21096.364171] EXT3-fs: mounted filesystem with ordered data mode.
Jul 2 12:11:58 vm1 kernel: [21096.364171] EXT3-fs: mounted filesystem with ordered data mode.
Jul 2 12:11:58 vm1 kernel: [21096.381372] kjournald starting. Commit interval 5 seconds
Jul 2 12:11:58 vm1 kernel: [21096.381539] EXT3 FS on sda8, internal journal
Jul 2 12:11:58 vm1 kernel: [21096.381542] EXT3-fs: mounted filesystem with ordered data mode.
Jul 2 12:11:58 vm1 kernel: [21096.396152] kjournald starting. Commit interval 5 seconds
Jul 2 12:11:58 vm1 kernel: [21096.396158] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
Jul 2 12:11:58 vm1 kernel: [21096.396344] EXT3 FS on sda8, internal journal
Jul 2 12:11:58 vm1 kernel: [21096.396348] EXT3-fs: mounted filesystem with ordered data mode.
Jul 2 12:11:58 vm1 kernel: [21096.412434] kjournald starting. Commit interval 5 seconds
Jul 2 12:11:58 vm1 kernel: [21096.412441] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
Jul 2 12:11:58 vm1 kernel: [21096.412610] EXT3 FS on sda8, internal journal
Jul 2 12:11:58 vm1 kernel: [21096.412612] EXT3-fs: mounted filesystem with ordered data mode.
root@vm1:/home/user1# fsck /tmp
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda8 has been mounted 4 times without being checked, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda8: 11/62464 files (0.0% non-contiguous), 8337/249856 blocks
root@vm1:/home/user1# mount -a
root@vm1:/home/user1#
- 执行 root(超级用户)shell。
- 解除挂载
/tmp
,从/etc/fstab
读取它的位置 。 - 打印出
/dev/sda8
的UUID,/dev/sda8
是挂载在/tmp
上的文件系统。 - 在
/dev/sda8
上创建一个新的文件系统。 - 再次打印出
/dev/sda8
的 UUID,注意如何变化,因为你创建了一个新的文件系统。 - 将此 UUID 附加到
/etc/fstab
。 - 打开
/etc/fstab
进行编辑。 - 挂载新创建的文件系统。这实际上是一个检查,是否你已经正确替换了 UUID,如果不是会有一个错误消息。
- 设置每两次挂载检查
/dev/sda8
。 - 解除挂载
/dev/sda8
。 - 检查
/dev/sda8
。 - 挂载,接触挂载
/dev/sda8
, 并连续四次向你展示/var/log/messages/
的最后4 行。请注意,从第三次开始,挂载系统通知你 需要运行e2fsck
。如果你重新启动系统,它将为你运行e2fsck
。 - 检查
/dev/sda8
。fsck
确定文件系统类型并自动调用e2fsck
。 - 挂载所有文件系统。如果没有错误,你已经完成了这个练习。
- 阅读
man mkfs
,man mkfs.ext3
,man tune2fs
。 - 阅读页面顶部的列表,并为你的所有文件系统读取幻数。
- 手动计算文件系统的大小,使用在
tune2fs -l
列表的块描述中提供的公式。 - 阅读这个幻灯片,并完成它展示的东西:http://mcgrewsecurity.com/training/extx.pdf。