磁盘管理
目录
设备文件
磁盘介绍
磁盘分区
创建磁盘分区
同步分区表
文件系统
一设备文件
设备文件关联至设备驱动程序, 用户通过操作这些设备文件间接管理对应的硬件设备
一个设备的名称表示整个磁盘, 而分区则用设备名加上一个分区号来表示
设备文件类型:
块设备 存取单位是块, 如磁盘
字符设备 存取单位是字符, 如键盘
为了方便管理这些设备, 系统设置了主设备号和次设备号用来区分
看如下示例:
8 代表主设备号 后边的数字代表次设备号
创建设备文件:
mknod 文件名 b 主设备号 次设备号 创建块设备文件
mknod 文件名 c 主设备号 次设备号 创建字符设备文件
二磁盘介绍
(针对机械硬盘)
磁盘的结构图如下:
CHS(柱面 / 磁头 / 扇区)
C: 一个柱面号即磁道号, 通常由外向内依次编号
H: 一个磁头号即盘面号, 一个盘面仅有一个磁头
S: 一个磁道可以有多个扇区, 通常一个扇区 512 字节, 一个扇区包含三个字段
标识字段 校验字段 数据字段
磁盘的存储容量 = 磁头数 * 磁道数 * 扇区数 * 512(字节)
磁盘的编址方式:
CHS 方式 #柱面,# 磁头,# 扇区的方式绝对寻址
LBA 方式 以 0 柱面, 0 磁头, 1 扇区表示整个磁盘的第一个扇区, 后面的扇区相对依次编号
三磁盘分区
在虚拟机界面新创建创建一个磁盘
可是现在远程终端并不能同步新加的磁盘
需要输入
echo '- - -' > /sys/class/scsi_host/host0/scan
同步磁盘信息
fdisk -l 查看新创建的磁盘
每个磁盘的第一个扇区存放的是分区信息 (MBRMaster Boot Record), 包括三部分:
1boot loader(446 字节) Linux 下为 grub
2 硬盘分区表 (16 字节 * 4=64 字节)
3 结束位 (2 字节) 十六进制的 55 aa
hexdump 命令可以查看二进制的文件,-C 表示 16 进制输出
hexdump -C -n 512 /dev/sda -v 查看分区信息有数据 (16 进制)
hexdump -C -n 512 /dev/sdb -v 查看分区信息全为 0
现在来做这样一个实验 (对分区表)
dd if=/dev/sda of=/dev/sdb bs=1 count=512 将 / dev/sda 的磁盘前 512 字节信息复制给 / dev/sdb
再次执行 hexdump -C -n 512 /dev/sdb -v, 分区表信息和结束位信息如下:
结果两张磁盘的分区信息一样, 唯一不同的是 / dev/sdb 没有第五个分区的信息 (原因是分区表只有 16 字节 * 4=64 字节, 只能保存四张分区表的信息, 即不能保存逻辑分区的信息), 效果图如下:
dd if=/dev/zero of=/dev/sdb bs=1 count=512 破坏 / dev/sdb 的分区信息
fdisk -l
发现 / dev/sdb 的分区消失
总结: MBR 中的分区表就是存放着整个磁盘的分区信息, 并且最多只能划分三个分区加一个扩展分区
继续实验 (对结束位)
dd if=/dev/sda of=/dev/sdb bs=1 count=512
dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510 (破坏分区信息的结束位)
hexdump -C -n 512 /dev/sdb -v, 结果结束位的 55 aa 变为了 00 00
fdisk -l 显示 / dev/sdb 没有分区
- dd
- if = /dev/sda of = /dev/sdb bs = 1 count = 2 skip = 510 seek = 510 hexdump - C - n 512 / dev / sdb - v
fdisk -l 显示 / dev/sdb 又有分区
总结: 结束位用来区分 MBR 的结束, 如果没有该结束位, 则系统无法识别出分区表的结束, 即没有分区
四创建磁盘分区
fdisk 磁盘分区
-l 列出指定外围设备的分区表状况 (以柱面为单位)
-u 搭配 - l 选项, 用扇区数目代替柱面数目 (以扇区为单位, 一个扇区 512 字节)
子命令:
a 在当前分区设定一个可启动标志
b 编辑一个 BSD 磁盘标识
c 切换为 DOS 兼容磁盘配额
d 删除当前分区
l 列出所有分区的类型
m 主菜单
n 创建一个新分区
o 创建一个 DOS 分区
p 输出所有分区列表和每个分区的信息
q 退出, 不保存
s 创建一个空的 Sun 磁盘标识
t 替换当前分区的类型
u 修改分区表中的条目的显示的单位 (柱面和扇区)
v 检测错误, 显示为分配扇区数的总和
w 保存修改退出
x 进入高级操作模式, 专家级操作命令
在子命令模式下 Ctrl+backspace 为删除键
用 fdisk 命令完成对磁盘的分区工作之后, 该磁盘仍然不具备存储功能, 还需要对所需的文件系统格式化
fdisk 是一个比较面相底层的系统工具, 因此在使用的时候最好预先对数据进行备份, 以免误操作造成数据丢失
gdisk 命令 -- 该命令默认没有安装, 使用 yum -y install gdisk 安装 (和 fdisk 极其类似)
parted 命令 (实时生效, 使用的时候注意)
格式: parted + [选项] + 设备文件 [命令 + 参数]
[选项]
-l 显示所有磁盘的分区信息
[命令 + 参数] (子命令模式下可以使用 tab 键补齐)
mklabel 创建分区表结构 (gpt 结构不能使用 fdisk -l 查看)
print 显示分区信息
mkpart primary 创建分区 (默认单位为 M)
rm 删除分区
quit 退出子命令模式
实例:
- parted /dev/sdb
- mklabel gpt
- mkpart primary 1 200
- mkpart primary 200 300
- quit
- parted -l
五同步分区表
操作系统所在盘不会及时更新分区表信息
查看内核是否同步分区表信息方法:
ls 设备文件名 *
cat /proc/partitions
lsblk 命令不会即时显示, 该命令读取的是内存中的磁盘分区信息 (树状结构)
同步分区表信息的方法:(只是修改显示的信息, 实际对硬盘没有操作)
partprobe 设备文件名 (centos6 仅对非系统所在盘有效)
partx -a /dev/sdb 更新增加的分区
partx-d/dev/sdb--nrNUM1-NUM2 更新删除的分区
六文件系统
存储设备或分区上的文件的方法和数据结构, 一个硬盘想要存放数据, 必须先创建文件系统
查看当前操作系统支持的文件系统:
- ls /lib/modules/$(uname -r)/kernel/fs/
- cat /proc/filesystems
创建文件系统:
mkfs 创建文件系统
mkfs.FS TYPE + 设备文件
mkfs -t FS TYPE + 设备文件
mkfs -L label + 设备文件 设定卷标
mke2fs 创建 ext 系列文件系统
-j 相当于 - t ext3
文件系统类型
blkid 查看文件系统信息 (mount 列出所有设备的格式类型)
tune2fs + 分区 重新设定 ext 系列文件系统的参数
-l 显示指定分区的超级块信息
-L 修改 label
-U 设置 UUID
dumpe2fs + 分区 导出分区的文件系统详细信息 (包含超级块信息)
-h 效果和 tune2fs -l 一样
超级块 : 存储整个文件系统信息的一个块
一个磁盘有 MBR 和四个分区,
一个分区有 boot sector 和文件系统,
一个文件系统有多个 block group,
一个 block group 有超级块, 块位图, inode 位图, inode 表和数据块等
- dumpe2fs /dev/sda1
- dumpe2fs 1.41.12 (17-May-2010)
- Filesystem volume name: <none>
- Last mounted on: /boot
- Filesystem UUID: 051c003c-2cef-4115-bc1c-525759174a77
- Default mount options: user_xattr acl
- Filesystem state: clean
- Errors behavior: Continue
- Filesystem OS type: Linux
- Inode count: 51200
- Block count: 204800
- Reserved block count: 10240
- Free blocks: 153675
- Free inodes: 51161
- First block: 1
- Block size: 1024
- Fragment size: 1024
- Reserved GDT blocks: 256
- Blocks per group: 8192
- Fragments per group: 8192
- Inodes per group: 2048
- Inode blocks per group: 256
- Flex block group size: 16
- Filesystem created: Tue Jan 9 04:48:06 2018
- Last mount time: Tue Feb 13 06:48:50 2018
- Last write time: Tue Feb 13 06:48:50 2018
- First inode: 11
- Inode size: 128
- Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
- Checksum 0x4512, unused inodes 2008
- Primary superblock at 1, Group descriptors at 2-2
- Reserved GDT blocks at 3-258
- Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
- Inode table at 291-546 (+290)
- 3785 free blocks, 2009 free inodes, 6 directories, 2008 unused inodes
- Free blocks: 4408-8192
- Free inodes: 24, 41-2048
上为执行 dumper2fs /dev/sda1 命令的部分执行结果, Group 0 之前是超级块的内容, 之后是每个块组的一些信息
通常将超级块块位图 inode 位图成为文件的元数据, 而 inode 表和数据块成为数据
文件系统检测和修复
当对数据修改并将文件写入磁盘时, 发生在非正常关机和死机, 就会发生数据不一致的问题, 为此需要对文件系统进行检查
非正常会有标记 no clean
fsck -p 自动修复
fsck -r 交互式修复
来源: http://www.bubuko.com/infodetail-2497467.html