在Linux中,文件是如何存储的,磁盘分区的逻辑组成是如何实现的,怎么对磁盘进行分区、格式化、挂载?
-
文件是如何存储的 块组 超级块 块组描述符号
文件系统先是分成了多个块组和超级块。每个块组分别包含了inode和data block,每个块组也包含了inode bitmap和block bitmap;每个块组还包括了块组描述符。
超级块包括的信息: 卷标、挂载时间、UUID、魔数、文件系统特性、挂载的默认选项、文件系统状态、OS类型、Inode和Block的相关数量、大小、可用数量、 保留的空间等信息。使用tune2fs -l /dev/sda3来查看超级块的信息。
GDT:记录了未使用的inodes数量,inode bitmap和datablock bitmap的位置,inode表的位置,空闲的block和inode数量。dumpe2fs /dev/sda3 | less 也可以使用-h参数 - 链接文件的两种,分别有什么特性
硬链接:指向同一个inode的多个文件路径
特性:目录不支持创建硬链接,不能跨分区创建硬链接,创建硬链接会增加inode引用计数。
ln passwd.back passwd.back2
软链接:指向一个文件路径的另一个文件路径
一个正常的文件,其inode的指针指向的是datablock的位置,而软链接则是指向了另一个文件的路径。软链接在文件大小是它指向的文件路径的字节数。
ln -s passwd.back passwd.sylink
[root@localhost tmp]# ls -il
总用量 12
33554511 -rwx------. 1 root root 836 2月 29 09:50 ks-script-XVVd4f
33554501 -rw-r--r--. 2 root root 1099 3月 1 11:37 passwd.back
33554501 -rw-r--r--. 2 root root 1099 3月 1 11:37 passwd.back2
33578842 lrwxrwxrwx. 1 root root 11 3月 1 11:38 passwd.sylink -> passwd.back
- 分区格式化mke2fs
mke2fs [OPTIONS] device
-t {ext2|ext3|ext4}:指明要创建的文件系统类型
mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
-b {1024|2048|4096}:指明文件系统的块大小;
-L LABEL:指明卷标;
-j:创建有日志功能的文件系统ext3;
mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3
-i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;
默认情况下,每16K字节一个inode
-N #:直接指明要给此文件系统创建的inode的数量;
-m #:指定预留的空间,百分比;
-O [^]FEATURE:以指定的特性创建目标文件系统;
[root@localhost tmp]# mke2fs -t ext3 -b 4096 -L lq_data -i 32768 -m 3 /dev/sda3
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=lq_data
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 5242880 blocks
157286 blocks (3.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
4096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
-
掌握Fdisk分区
请实验完成 -
元数据区存放了什么
元数据区存储了:inode inode位图和块位图
数据存储区则是磁盘块。
inode存储了文件的权限和属性相关信息。可以使用 stat /etc/passwd来查看文件的元数据信息。 - 如何让内核识别新的分区 parx kpartx
cat /proc/partitions
当我们使用fdisk对一个磁盘进行了分区,并且使用mke2fs工具对分区进行了格式化以后,需要让内核识别我们的新分区。
此时,可以使用cat /proc/partitions来看一下,内核有没有识别到这个分区。
如果没有识别,让内核重读一下分区信息。
A. partx - tell the Linux kernel about the presence and numbering of on-disk partitions
-a Add the specified partitions, or read the disk and add all partitions.
用法: partx -a /dev/sda
B. kpartx - Create device maps from partition tables
-a Add partition mappings
用法: kpartx -a /dev/sda
如果一次没有刷出来,请再刷一次。
-
创建交换分区并生效
mkswap /dev/sda6
swapon
创建一个5G的交换分区 - blkid 定位或显示块设备的属性。
[root@localhost ~]# blkid /dev/sda3
/dev/sda3: LABEL="lq_data" UUID="f80f0e3d-9ccb-43a2-ac30-98722a8a6ea2" TYPE="ext3"
[root@localhost ~]# blkid -L lq_data
/dev/sda3
[root@localhost ~]# blkid -U f80f0e3d-9ccb-43a2-ac30-98722a8a6ea2
/dev/sda3
[root@localhost ~]# blkid -t TYPE=ext3
/dev/sda3: LABEL="lq_data" UUID="f80f0e3d-9ccb-43a2-ac30-98722a8a6ea2" TYPE="ext3
- e2label 查看和设置卷标,如果不跟卷标则是查看卷标,如果跟卷标,则表示设置新卷标。
e2label device [LABEL]
[root@localhost ~]# e2label /dev/sda3
lq_data
[root@localhost ~]# e2label /dev/sda3 DATA
[root@localhost ~]# e2label /dev/sda3
DATA
[root@localhost ~]# blkid /dev/sda3
/dev/sda3: LABEL="DATA" UUID="f80f0e3d-9ccb-43a2-ac30-98722a8a6ea2" TYPE="ext3"
- tune2fs:在ext系列文件系统上调整文件系统的参数,其中作用最大的是-O和-o
-l 查看超级块的内容
-j 将ext2升级为ext3,无损升级
-L 设置卷标
-m 不格式化,调整预留的空间的百分比,默认为5%
-O [^]feature 调整指定特性
-o 调整默认挂载选项
tune2fs -o acl /dev/sda5
[root@localhost ~]# mke2fs -t ext2 -L TEST -m 10 /dev/sda3
接下来,我们通过tune2fs来调整文件系统的属性,我先尝试在挂载状态下进行。
[root@localhost ~]# mount /dev/sda3 /mnt
A. 将文件系统类型升级成ext3
[root@localhost ~]# tune2fs -j /dev/sda3
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: 完成
[root@localhost ~]# blkid /dev/sda3
/dev/sda3: LABEL="TEST" UUID="96361554-d8a3-43cb-860d-45ce26daaeff" SEC_TYPE="ext2" TYPE="ext3"
B. 设置卷标为Corun
[root@localhost ~]# tune2fs -L Corun /dev/sda3
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# blkid /dev/sda3
/dev/sda3: LABEL="Corun" UUID="96361554-d8a3-43cb-860d-45ce26daaeff" SEC_TYPE="ext2" TYPE="ext3"
C. 更改预留的空间百分比为2%
[root@localhost ~]# tune2fs -m 2 /dev/sda3
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 2% (104857 blocks)
-
dumpe2fs: 显示ext系列文件系统的属性信息
dumpe2fs /dev/sda5
dumpe2fs -h /dev/sda5 -
fsck和e2fsck
ext系列文件系统的专用工具:
e2fsck : check a Linux ext2/ext3/ext4 file system
e2fsck [OPTIONS] device
-y:对所有问题自动回答为yes;
-f:即使文件系统处于clean状态,也要强制进行检测;fsck:check and repair a Linux file system
-t fstype:指明文件系统类型;
fsck -t ext4 = fsck.ext4
-a:无须交互而自动修复所有错误;
-r:交互式修复; - 文件系统的挂载与卸载
mount DEVICE DIR
umount DEVICE|DIR
示例:
mount /dev/sda3 /mnt
umount /dev/sda3
南要注意的是:挂载点应该是一个空目录,推荐将挂载点放置在根所在的文件系统上。
来源:51CTO
作者:liu008qing
链接:https://blog.51cto.com/liu008qing/2474830