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