磁盘基础知识
盘体
扇区:是数据存储的最小单元,有512字节和4k两种格式。操作系统识别 的最小单位。
工作原理:
为了对扇区进行查找和管理,需要对扇区进行编号,扇区的编号从0磁道开始,起始扇区为1扇区,其后为2扇区,3扇区…,0磁道的扇区编号结束后,1磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区(n扇区)。例如,某个硬盘有1024个磁道,每个磁道划分为63个扇区,则0磁道的扇区号为1-63,1磁道的起始扇区号为64,最后一个磁道的最后一个扇区号为64512。
交叉因子:数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很可能出现磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,所以用交叉因子来解决这个问题。
如下图,增加了交叉因子后的扇区编号一般是下面这样:
磁道:磁盘的每个盘面被划分为许多同心圆,这些同心圆的轨道叫做磁道。
磁柱:不同盘片上相同等级的磁道组成磁柱。是分区的最小单位。
簇:相邻的扇区组成族。文件系统存储的最小单位。(4k=4096bytes 4096/512=8)
盘面:磁盘一般会有一个或多个盘面,每个盘片可以有两个面,即第一个盘片的正面称为0面,反面称为1面,第二个盘片的正面称为2面,反面3面,以此类推。
磁盘核心分区
磁盘分区表主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT表。
MBR分区表中,第一个扇区最重要,里面有:
MBR(Main Boot Record主引导记录区) 位于整个硬盘的0磁道0柱面1扇区。在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
MBR分区表上有四项,每一项表示一个分区,所以一个分区最多只能表示4个分区。分区表上的4项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个,所以硬盘最多可以有四个主分区或者三个主分区一个扩展分区。
余下的分区表是表示逻辑分区的,这里有必要阐述一点:逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。
GPT分区表除了分区数量扩充较多外,支持的磁盘容量也可以超过2TB。
分区表
分区表由4项组成,每项16个字节,共4*16=64字节
512-446-64=2:磁盘有效标识
接口
IDE:价格低廉,兼容性强,性价比高,但数据传输慢,不支持热插拔等。
SCSI:传输速率高,读写性能好,可连接多个设备,可支持热插拔,CPU占用率低但是价格比较贵。应用于中、高端服务器和高档工作站中。
SATA:具备了更强的纠错能力,可靠性强,结构简单,支持热插拔等。
SAS:是SATA协议的扩展,传输效率高。
USB:扩展强,效率低。
光纤通道:热插拔性,高速带宽,远程连接,连接设备数量大等。
磁盘文件名
/dev/sd[a-p][1-128]:实体磁盘的文件名
/dev/vd[a-d][1-128]:虚拟磁盘的文件名
/dev/md[1-128]:软件磁盘的文件名
/dev/hd[a-d]:IDE的磁盘的文件名
/dev/cdrom:当前CD/DVD ROM
/dev/fd[0-1]:软驱
磁盘管理命令
fdisk命令
针对MBR分区表类型使用fdisk,针对GPT分区表类型使用gdisk,因为fdisk不支持大于2T的磁盘进行分区。gdisk与fdisk使用方法一致。
常用参数
fdisk -l #查看系统的分区详细信息
fdisk /dev/sdb #对sdb磁盘进行分区
例1:给sdb磁盘填加一个主分区,选择默认分区号2,扇区为4096-40000
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (4001-209715199,默认为 4096):
将使用默认值 4096
Last 扇区, +扇区 or +size{K,M,G} (4096-209715199,默认为 209715199):40000
分区 2 已设置为 Linux 类型,大小设为 17.5 MiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
p:创建主分区
e:创建扩展分区
w:保存新建内容并退出
例2:删除分区
命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):2
分区 2 已删除
例3:改变分区类型
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“未知”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk -l
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20971520 10484736+ 8e Linux LVM
/dev/sdb2 83886080 125829119 20971520 83 Linux
/dev/sdb3 125829120 146800639 10485760 83 Linux
parted命令
既可以对MBR类型分区表进行分区,也可对GPT类型进行分区
#给磁盘sdb增加xfs类型的主分区两个,分别占空间为40%-60%,60%-70%
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart primary xfs 40% 60%
(parted) mkpart primary xfs 60% 70%
(parted) quit
信息: You may need to update /etc/fstab.
[root@localhost ~]# fdisk -l
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00055848
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 40000 18976+ 83 Linux
/dev/sdb2 83886080 125829119 20971520 83 Linux
/dev/sdb3 125829120 146800639 10485760 83 Linux
###################################################
(parted) rm 1 #删除第一个分区
[root@localhost ~]# fdisk -l
设备 Boot Start End Blocks Id System
/dev/sdb2 83886080 125829119 20971520 83 Linux
/dev/sdb3 125829120 146800639 10485760 83 Linux
交互式
[root@localhost ~]# parted
GNU Parted 3.1
使用 /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb #选择磁盘
使用 /dev/sdb
(parted) mkpart #创建分区
分区类型? primary/主分区/extended/扩展分区? primary
文件系统类型? [ext2]? xfs
起始点? 0%
结束点? 20%
###################################################
(parted) print #打印分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
1 1049kB 21.5GB 21.5GB primary
2 42.9GB 64.4GB 21.5GB primary
3 64.4GB 75.2GB 10.7GB primary
###################################################
(parted) resizepart #修改分区大小
分区编号? 1
结束点? [21.5GB]? 10%
警告: Shrinking a partition can cause data loss, are you sure you want to continue?
是/Yes/否/No? y
(parted) print
Number Start End Size Type File system 标志
1 1049kB 10.7GB 10.7GB primary
2 42.9GB 64.4GB 21.5GB primary
3 64.4GB 75.2GB 10.7GB primary
文件系统管理命令
格式化
mkfs
#将sdb1分区格式化为ext4格式
#方法1:
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
#方法2:
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs
-t | 指明文件系统类型 |
---|---|
-b | 指明文件系统的块大小 |
-L | 指明卷标 |
-i | 指明inode与字节比率 |
-m | 指明预留的空间,百分比 |
– | – |
查看文件系统属性(ext4系列)
[root@localhost ~]# dumpe2fs /dev/sdb1 #显示文件系统的属性信息
[root@localhost ~]# tune2fs -l /dev/sdb1 #查看超级块的内容
[root@localhost ~]# e2label /dev/sdb1 rosier #设定卷标
[root@localhost ~]# e2label /dev/sdb1 #查看卷标
rosier
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="rosier" UUID="5c375fa6-dd5f-4efa-a6a9-0dc58f65d4d8" TYPE="ext4"
文件系统修复
#检查partition,如有问题会自动修复,检查时先卸载
[root@localhost ~]# e2fsck -a /dev/sdb1
mimi: clean, 11/655360 files, 83137/2621184 blocks
#设定superblock位置
[root@localhost ~]# mke2fs -n /dev/sdb1 #先查看其它可用superblock位置
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
[root@localhost ~]# e2fsck -b 163840 /dev/sdb1 修改superblock位置到163840
#检查sdb1是否有坏轨
[root@localhost ~]# e2fsck -c /dev/sdb1
挂载
根文件系统除外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为挂载点。
临时挂载
#指定文件系统类型,指定挂载选项
[root@localhost ~]# mount -t ext4 -o rw /dev/sdb1 /data
#使用卷标进行挂载
[root@localhost ~]# mount -L rosier /data
挂载时若没有指定挂载选项,则为默认选项
defaults:rw,suid,dev,exec,auto,nouser,async,relatime
常见挂载选项
选项 | 含义 |
---|---|
rw | 读写 |
ro | 只读 |
suid | 支持suid |
dev | 支持设备文件 |
nodev | 不支持设备文件 |
noexec | 不允许执行二进制文件 |
exec | 允许执行二进制文件 |
auto | mount -a 开机自动挂载 |
noauto | mount -a 开机不自动挂载 |
async | 异步写入 |
sync | 同步写入 |
acl | 支持acl功能 |
remount | 在线重新挂载 |
pri | 指定优先级 |
卸载
#可以带设备名,也可带挂载点
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# umount /data
永久挂载
挂载配置文件:/etc/fstab文件
磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。
系统开机时会主动读取/etc/fstab这个文件中的内容。
第一列:设备名(或UUID,卷标)
UUID查看:blkid命令
第二列:挂载点
第三列:文件系统类型
第四列:参数
第五列:备份策略,通常这个参数的值为0或1
0 | 代表不要做dump备份 |
---|---|
1 | 代表每天进行dump操作 |
2 | 代表不定日期的进行dump操作 |
第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。
0 | 不要校验 |
---|---|
1 | 最早校验(一般根目录会选择使用2 |
2 | 1级别检验完成之后进行检验 |