磁盘管理
目录
- 设备文件
- 磁盘介绍
- 磁盘分区
- 创建磁盘分区
- 同步分区表
- 文件系统
一、设备文件
设备文件关联至设备驱动程序,用户通过操作这些设备文件间接管理对应的硬件设备
一个设备的名称表示整个磁盘,而分区则用设备名加上一个分区号来表示
设备文件类型:
块设备 存取单位是块,如磁盘
字符设备 存取单位是字符,如键盘
为了方便管理这些设备,系统设置了主设备号和次设备号用来区分
看如下示例:
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 查看新创建的磁盘
每个磁盘的第一个扇区存放的是分区信息(MBR—Master Boot Record),包括三部分:
1、boot 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 --nr NUM1-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 交互式修复
Linux学习—磁盘管理知识点总结
原文地址:http://blog.51cto.com/13570193/2071510