目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

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

作者:Soulboy