# 文件系统的特殊观察与操作
文件系统是在是非常有趣的东西,鸟哥学了好几年很多东西都不懂,这里有一些经验以供参考
# 磁盘空间之浪费问题
前面 ext2 data block 中谈到一个 block 只能放置一个文件,因此太多小文件会浪费很多的磁盘容量。
[root@study ~]# ll -sh
总用量 16K
4.0K -rw-------. 1 root root 2.2K 10月 4 18:32 anaconda-ks.cfg
4.0K -rw-r--r--. 2 root root 451 6月 10 2014 crontab
0 lrwxrwxrwx. 1 root root 12 10月 22 00:00 crontab2 -> /etc/crontab
4.0K -rw-r--r--. 1 root root 2.2K 10月 4 18:42 initial-setup-ks.cfg
4.0K -rwxr-xrwx. 1 mrcode mrcode 2.2K 10月 7 23:30 initial-setup-ks-mrcode.cfg
1
2
3
4
5
6
7
2
3
4
5
6
7
上述的总用量是每个文件所使掉 blcok 的容量的汇总,但是 哪个 crontab 文件实际只有用 451bytes,但是他却占用了整个 block (每个 block 为 4k)。所以总共占用了 16k 的容量,但是实际这里的文件总容量不到 7k
当讨论磁盘空间浪费问题的时候,需要考虑到文件容量的损耗
# 利用 GNU 的 parted 进行分区行为(Optional)
parted 同时支持 gdisk 和 fdisk 分区
parted [装置][指令][参数]
选项与参数,指令功能:
新增分区:mkpart [primary|logical|extended][ext4|vfat|xfs] 开始 结束
显示分区:print
删除分区:rm [partition]
1
2
3
4
5
6
2
3
4
5
6
实践练习
# 列出目前本机的分区表资料
[root@study ~]# parted /dev/sda print
Model: ATA VBOX HARDDISK (scsi) # 磁盘接口与型号
Disk /dev/sda: 43.8GB # 磁盘文件名与容量
Sector size (logical/physical): 512B/512B #每个扇区大小
Partition Table: gpt # 分区表 gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name 标志
1 1049kB 3146kB 2097kB bios_grub
2 3146kB 1077MB 1074MB xfs
3 1077MB 33.3GB 32.2GB lvm
4 33.3GB 34.4GB 1074MB xfs Linux filesystem
5 34.4GB 35.4GB 1074MB ext4 Microsoft basic data
6 35.4GB 36.0GB 537MB linux-swap(v1) Linux swap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上面是最简单的 parted 指令功能简介,可以使用 man parted 或则 parted /dev/sda help mkpart
查询更详细的数据。下面解释下每个字段是啥意思
- Number:分区槽号码,比如 1 表示 /dev/sda1
- Start:分区的其实位置在这颗磁盘的多少 MB 处?这里以容量作为单位
- End:此分区的结束位置在这颗磁盘的多少 MB 处?
- Size:由上述数据分析,得到这个分区槽有多少容量
- File system:分析可能的文件系统类型
- Name:如同 gdisk 的 System ID 的意思
不过这里你发现没有,start 与 end 的单位都不一样,看起来很费劲,可以通过以下指令固定
[root@study ~]# parted /dev/sda unit mb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 43772MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name 标志
1 1.05MB 3.15MB 2.10MB bios_grub
2 3.15MB 1077MB 1074MB xfs
3 1077MB 33293MB 32216MB lvm
4 33293MB 34367MB 1074MB xfs Linux filesystem
5 34367MB 35441MB 1074MB ext4 Microsoft basic data
6 35441MB 35978MB 537MB linux-swap(v1) Linux swap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
如果想将原本的 MBR 和 GPT 分区表互相换,也可以使用 parted,不过不要用本次的 sda 来测试,因为分区表格式不能转换,该磁盘上的系统会损坏的。
下面测试,笔者就没有条件测试了,直接记录笔记
# 将 /dev/sda 原本是 MBR 分区变成 GPT 分区表
parted /dev/sda print
...
Partition Table: msdos # MBR 就是现实 msdos 格式
# 改变成 gpt 分区
parted /dev/sda mklabel gpt
1
2
3
4
5
6
7
2
3
4
5
6
7
新的示例:建立一个全新的分区槽,格式化为 vfat 格式,且挂载到 /data/win 目录
# 查看分区表情况
[root@study ~]# parted /dev/sda print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 43.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name 标志
1 1049kB 3146kB 2097kB bios_grub
2 3146kB 1077MB 1074MB xfs
3 1077MB 33.3GB 32.2GB lvm
4 33.3GB 34.4GB 1074MB xfs Linux filesystem
5 34.4GB 35.4GB 1074MB ext4 Microsoft basic data
6 35.4GB 36.0GB 537MB linux-swap(v1) Linux swap
# 找到最后一个分区的 end 位置,作为下一个分区的起始位置
[root@study ~]# parted /dev/sda mkpart primary fat32 36.0GB 36.5GB
信息: You may need to update /etc/fstab.
# 再次查看,就看到第 7 个了
[root@study ~]# parted /dev/sda print
7 36.0GB 36.5GB 522MB primary
# 确认真的存在
[root@study ~]# partprobe
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
[root@study ~]# lsblk /dev/sda7
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda7 8:7 0 498M 0 part
# 格式化分区为 vfat 格式
[root@study ~]# mkfs -t vfat /dev/sda7
mkfs.fat 3.0.20 (12 Jun 2013)
[root@study ~]# blkid /dev/sda7
/dev/sda7: SEC_TYPE="msdos" UUID="72BE-0556" TYPE="vfat" PARTLABEL="primary" PARTUUID="3a31eca1-2f5d-4960-8d61-739c4461b30f"
# 添加到自动挂载
nano /etc/fstab
UUID="72BE-0556" /data/win vfat defaults 0 0
[root@study ~]# mkdir /data/win
[root@study ~]# mount -a
[root@study ~]# df /data/win/
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda7 509672 0 509672 0% /data/win
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
事实上,你应该使用 gdisk 来处理 GPT 分区,不过 parted 非常适合通过脚本来一口气将分区全部建立,因为 parted 可以不用与用户交互
← 内存交换空间(swap)之建置 重点回顾 →