磁盘管理
(1) MBR分区表
1. 主引导程序(boot loader)占用了 446byte
安装操作系统时写入引导程序
2. 分区表(Partition table)占用了 64byte
(每个分区信息16b,可存储4个分区信息)
3. 有效标志符(magic number)占用了 2byte(55AAH 代表有效)
标志MBR分区表是否生效
(2) 主引导扇区的读取流程:
① BIOS 加电自检 ( Power On Self Test -- POST )。BIOS 执行内存地址的跳转指令,跳转到固化在 ROM 中的自检程序处,对系统硬件(包括内存)进行检查。
② 读取主引导记录(MBR)。当 BIOS 检查到硬件正常并与 CMOS 中的设置相符后, 按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS 将相应启动设备的第一个扇区(也就是MBR 扇区)读入内存。
③ 检查 MBR 的结束标志位是否等于 55AAH,若不等于则转去尝试其他启动设备,如果没有启动 设备满足要求则显示“NO ROM BASIC”然后死机。
④ 当检测到有启动设备满足要求后,BIOS 将控制权交给相应启动设备。启动设备的 MBR 将自 己复制到 0000:0600H 处,然后继续执行。
⑤ 根据 MBR 中的引导代码启动引导程序。
数据存储的层级
表示层:文件名
逻辑层:文件系统(data-block:4k) super-block高级格式化
物理层:扇区(512byte) 分区表(MBR-64byte)低级格式化
格式化:写入文件系统(写入存储规范)
文件系统
super block:超级块,记录每个分区的 block 的大小、数量;块位图(已使用和未使用的 inode和 block 的数量);文件系统挂载时间,最后修改时间,最近检查时间。
块位图:记录最后一个文件的存储位置和所有未存储的数据块位置
data block:数据块,保存真实数据的位置,block 的大小和数量在格式化成文件系统时已经固定, 除非重新格式化,否则不能修改。单个文件占用小于一个 block 的大小时,单独占用一个 block,剩余空间不会被利用。inode:别名 i 节点;记录 inode 号、权限、属主属组、时间戳、大小、占了哪几个 block
inode 显示的数据又叫文件的元数据
磁盘管理命令
df -ahT 参数 以常见单位显示文件系统类型,包括挂载(a-所有,h-人性化显示,T-类型type)
du -sh 参数 查看文件大小(包括其内文件大小之和)(s-和,h-人性化显示,a-每个文件)
du -h -x --max-depth=1 查看当前目录下一级目录的空间大小
fsck -y 分区名 自动修复出现问题的文件系统
dumpe2fs -h 分区名 详细显示磁盘状态
stat 文件名 查看文件详细信息
file文件 判断文件类型
type命令名 判断命令是外部命令还是内置命令
fdisk -l 查看系统所有硬盘及分区
MBR分区
1) 普通分区
fdisk 设备名 分区
p:打印分区表
n:新建一个新分区
d:删除一个分区
m:输出菜单
q:不保存退出
w:把分区写进分区表,保存并退出
mkfs -t ext4 分区设备名称 格式化(-t:指定文件类型)
mke2fs –text4 –b4096 –i4096 /dev/sdb1 格式化(b-指定block大小,i-多少个block分配一个 inode号)
mkfs.* 分区设备名称 格式化(*代表文件系统)
2) 创建swap分区
① fdisk /dev/sdb1
--t --1 --82 --w
② mkswap /dev/sdb1 格式化
③ swapon /dev/sdb1 启用swap分区
④ vim /etc/fstab 将swap分区添加到配置文件,实现自动挂载
⑤ mount -a 检查/etc/fstab是否错误
⑥ free 查看实际swap分区大小
3) 编辑/etc/fstab 系统开机自动挂载文件
1. 设备文件名(UUID)UUID:/dev/disk/by-uuid
2. 挂载点
3. 文件系统类型
4. 挂载特殊选项
5. 是否备份: 0 不备份 1 每天备份 2 不定期备份
6. 是否检查磁盘状态: 0 不检查 1 启动时检查 2 启动后检查
4) 修复启动文件错误 /etc/fstab
1)根据提示输入所需的 root 密码,那么修改下/etc/fstab
2)对/目录进行重新挂载成读写rw
mount -o remount,rw /
3)修改/etc/fstab 中的错误
GPT分区表
GPT(GUID Partition Table)"全局唯一标识磁盘分区表" ,主要用来代替 MBR 分区表,突破存储限制。
GPT 分区表的构成
◆ LBA 0 :GPT 分区的最开头,考虑兼容性问题,开头仍然存放 MBR 分区表,只是里面存放的
是指向 GPT 的指针。防止有一些系统不识别 GPT 分区表。
◆ LBA 1 :存储了硬盘的总存储空间,以及 GPT 分区表的信息,定义最多能创建 128 个分区,每个分信息占用的空间是 128 字节;128 个分区中有一个是用来存储备份分区表的,所以可以手动指定的分区数为 127 个分区。
◆ LBA 2-33:每个分区信息存放的位置,每个分信息占用的空间是 128 字节。2-33
正好是 32 个扇区。32*512=16384,每个分区信息占用了 128 字节,16384/128=128 个分区。
LBA0(0磁道,1扇区) LBA1(0,2) LBA2(0,3) …… LBA33(0,34)
主引导程序
446byte 分区表
64byte 有效标志符
2byte 总大小,gpt分区表信息
512byte 存储4个分区信息,每个128b
512byte ……
……
…… 存储4个分区信息,每个128b
512byte
GPT分区操作
parted /dev/sdb1
① print 查看
② mklabel 修改分区表类型
MBR—-> msdos GPT—-> gpt
③ mkpart 创建分区 起始点5G,结束点 10G
无保存选项,每次操作直接保存
⑤ quie 退出
⑥ mkfs 格式化
注:
1) UUID查看:blkid
blkid -o list 列表方式查看详细信息
blkid -s TYPE 显示所有设备文件系统
fsck -y /dev/sdc 修复文件系统异常
partprobe /dev/sdc 修复文件系统异常
2) 添加新硬盘
查看主机总线号
[root@localhost ~]# ls /sys/class/scsi_host/ host0 host1 host2
依次扫描总线号
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
如果有多个,则使用循环
[root@localhost ~]# for i in /sys/class/scsi_host/host*/scan;do echo "- - -" > $i;done