Linux磁盘、文件系统管理
磁盘接口类型
并口的同一个线缆上可以接多个设备。
串口的同一个线缆上可以接一个设备。
- IDE:并口,133MB/s、IOPS=100、非企业级
- SCSI:并口,Ultrascsi320,320MB/S,Ultrascsi640,640MB/S。 IOPS=150 企业级
- SATA:串口,6gbps。 IOPS=100 非企业级
- SAS:串口(SCSI),6gbps。 IOPS=150 企业级
- USB:串口,480MB/s
- 普通 SATA 固态硬盘:IOPS=9W
- PCI-E 固态硬盘:IOPS=10W~50W
一切皆文件
设备类型
- 块(block):随机访问、数据交换单位是“块”。
- 字符:线性访问,数据交换单位是“字符”。
设备文件
一切皆文件,设备也需要以文件的形式存在:/dev/*,设备文件主要作用是关联至设备的驱动程序。
设备号
- major:主设备号,区分设备类型;用于标明设备所需要的驱动程序。
- minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口。
创建(申请)设备文件
1# 创建字符类型设备,主版本号 111 次版本号 1
2[root@localhost apache-rocketmq]# mknod /dev/testdev c 111 1
3[root@localhost apache-rocketmq]# ls -l /dev/testdev
4crw-r--r-- 1 root root 111, 1 8月 21 13:57 /dev/testdev
引用设备的方式
- 设备文件名
- 卷标
- UUID
磁盘设备命名规范
1# IDE、SCSI、SATA、USB、SAS
2 设备识别:/dev/sd[a-z]
3 分区识别:/dev/sda1、/dev/sda2
磁盘分区类型
1# MBR
2 位于磁盘的 0 sector
3 一个 sector 512 bytes
4 446bytes(bootloader) + 64bytes(FAT 文件系统分区表,每16byes标识一个分区) + 2bytes(当前MBR区域是否有效:55AA表示有效)
5 4主分区
6 3主1扩展(n逻辑分区)
7
8# GPT
分区标识
- 主分区和扩展分区:1~4
- 逻辑分区:5
磁盘分区管理:fdisk
1# 查看磁盘的分区信息
2[root@localhost apache-rocketmq]# fdisk -l /dev/sda
3
4# 管理分区:它有许多子命令,分别用于不同的管理功能;所有操作均在内存中完成,没有直接同步到磁盘,直到使用w命令同步到磁盘才会生效。
5[root@localhost apache-rocketmq]# fdisk /dev/sda
6
7# 添加扩展分区
8命令(输入 m 获取帮助):n
9Partition type:
10 p primary (3 primary, 0 extended, 1 free)
11 e extended
12Select (default e): e
13已选择分区 4
14起始 扇区 (35674112-266338303,默认为 35674112):
15将使用默认值 35674112
16Last 扇区, +扇区 or +size{K,M,G} (35674112-266338303,默认为 266338303):+20G
17分区 4 已设置为 Extended 类型,大小设为 20 GiB
18
19# 添加逻辑分区
20命令(输入 m 获取帮助):n
21All primary partitions are in use
22添加逻辑分区 5
23起始 扇区 (35676160-77617151,默认为 35676160):
24将使用默认值 35676160
25Last 扇区, +扇区 or +size{K,M,G} (35676160-77617151,默认为 77617151):+5G
26分区 5 已设置为 Linux 类型,大小设为 5 GiB
27
28# 保存配置并写入磁盘
29命令(输入 m 获取帮助):w
30The partition table has been altered!
31Calling ioctl() to re-read partition table.
32WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
33The kernel still uses the old table. The new table will be used at
34the next reboot or after you run partprobe(8) or kpartx(8)
35正在同步磁盘。
36
37# 查看分区表
38[root@localhost ~]# cat /proc/partitions
39major minor #blocks name
40 2 0 4 fd0
41 8 0 133169152 sda
42 8 1 2048 sda1
43 8 2 1048576 sda2
44 8 3 16785408 sda3
45 11 0 1048575 sr0
46 253 0 10485760 dm-0
47 253 1 1048576 dm-1
48 253 2 5242880 dm-2
49
50# 通知内核重新读取分区表(有时需要多执行几次)
51[root@localhost apache-rocketmq]# partx -a /dev/sda
52
53# 再次查看分区表
54[root@localhost ~]# cat /proc/partitions
55major minor #blocks name
56 2 0 4 fd0
57 8 0 133169152 sda
58 8 1 2048 sda1
59 8 2 1048576 sda2
60 8 3 16785408 sda3
61 8 4 1 sda4
62 8 5 5242880 sda5
63 11 0 1048575 sr0
64 253 0 10485760 dm-0
65 253 1 1048576 dm-1
66 253 2 5242880 dm-2
67
68# 调整第6个分区:设置类型为swap 交换分区类型
69命令(输入 m 获取帮助):n
70All primary partitions are in use
71添加逻辑分区 6
72起始 扇区 (46163968-77617151,默认为 46163968):
73将使用默认值 46163968
74Last 扇区, +扇区 or +size{K,M,G} (46163968-77617151,默认为 77617151):+2G
75分区 6 已设置为 Linux 类型,大小设为 2 GiB
76
77命令(输入 m 获取帮助):l
78
79命令(输入 m 获取帮助):t
80分区号 (1-6,默认 6):6
81Hex 代码(输入 L 列出所有代码):82
82已将分区“Linux”的类型更改为“Linux swap / Solaris”
83
84
85命令(输入 m 获取帮助):p
86磁盘 /dev/sda:136.4 GB, 136365211648 字节,266338304 个扇区
87Units = 扇区 of 1 * 512 = 512 bytes
88扇区大小(逻辑/物理):512 字节 / 4096 字节
89I/O 大小(最小/最佳):4096 字节 / 4096 字节
90磁盘标签类型:dos
91磁盘标识符:0x000d3d34
92
93 设备 Boot Start End Blocks Id System
94/dev/sda1 2048 6143 2048 83 Linux
95/dev/sda2 * 6144 2103295 1048576 83 Linux
96/dev/sda3 2103296 35674111 16785408 8e Linux LVM
97/dev/sda4 35674112 77617151 20971520 5 Extended
98/dev/sda5 35676160 46161919 5242880 83 Linux
99/dev/sda6 46163968 50358271 2097152 82 Linux swap / Solaris
文件系统管理
低级格式化
分区之前,对磁盘进行格式化,划分磁盘、簇等……
高级格式化
分区之后,对分区进行格式化,创建文件系统。
1# 元数据区(每个文件的inode大小都一样,只是填充的信息不一样而已)
2 文件的元数据(inode):大小、权限、属主属组、时间戳、数据块指针(元数据中哪些数据块数据该文件,数据块指针数量有上限,标识的数据区的数据块数量也受到inode中的数据块指针上限影响,因此单个文件大小受限于inode数据块指针的结构设计)
3# 数据区
4 以块的形式存储文件的内容数据,块的标准大小有多种。
创建文件系统的工具
1mkfs.xfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix ……
2
3# 对执行分区进行格式化:xfs文件系统
4[root@localhost ~]# mkfs.xfs /dev/sda5
5
6# 查看指定分区状态
7[root@localhost ~]# xfs_info /dev/sda5
8xfs_info: /dev/sda5 is not a mounted XFS filesystem
检测及修复文件系统的工具
1fsck
2 fsck.ext2 fsck.ext3 ....
查看其他属性的工具
1dumpe2fs,tune2fs
调整文件系统特性
1tune2fs 主要用于查看ext系列文件系统
swap 文件系统
Linux 上的交换分区必须使用独立的文件系统;且文件系统的 System ID 必须为 82。
1# 将指定分区格式化成swap 类型的分区。
2[root@localhost ~]# mkswap /dev/sda6
3mkswap: /dev/sda6: warning: wiping old xfs signature.
4正在设置交换空间版本 1,大小 = 2097148 KiB
5无标签,UUID=bca4f48e-71dd-43d8-878f-7aea13228c11
不同文件系统下的存储设备
Windows 无法识别 Linux 的文件系统;因此,存储设备需要两种系统之间交叉使用时,应该使用 windows 和 Linux 同时支持的文件系统:fat32(vfat Linux 的叫法)
1# 安装命令(默认没有mkfs.vfat)
2yum install dosfstools
3
4# 格式化fat32
5mkfs.vfat device
文件系统的使用
首先要“挂载”,跟文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”。
- 挂载点:用于作为另一文件系统的访问入口。
1# mount 命令
2 -r readonly
3 -w read and write (默认mount就是读写挂载)
4 -n 默认情况下,设备挂载或卸载操作会同步更新至/etc/mtabl文件中;-n 禁用此特性。
5 -t 指明要挂载的设备上的文件系统的类型;多数情况下可省略(mount命令会通过blkid命令来判断要挂载设备的文件系统类型)
6 -L LABEL,挂载时使用卷标,而不使用设备文件。 mkfs.xfs -L MYDATA /dev/sda5
7 -U UUID,使用UUID挂载 blkid /dev/sda5 UUID="43a1cc56-e3db-4830-a792-4e1617837345"
8
9# 创建挂载点
10[root@localhost ~]# mount /dev/sda5 /mnt
11
12# 查看当前所有挂载点
13[root@localhost ~]# mount
14...
15/dev/sda5 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
16
17# 卸载挂载点
18[root@localhost ~]# umount /mnt
19
20# mtab文件记录当前系统所有挂载和卸载记录
21[root@localhost ~]# cat /etc/mtab