磁盘基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘基础知识相关的知识,希望对你有一定的参考价值。
新加硬盘识别 (磁盘设备名是不稳定的 在生产中有关磁盘的配置文件 需注意)[[email protected] httpd-2.4.27]#echo '- - -'>/sys/class/scsi_host/host2/scan
块设备:block,存取单位“块”,磁盘 随机读写 如/dev/sda
字符设备:char,存取单位“字符”,键盘 顺序读写 如 /dev/zero /dev/null
设备号码:
主设备号:major number, 标识设备类型
次设备号:minor number, 标识同一类型下的不同设备
[[email protected] httpd-2.4.27]#ll /dev/sd*
brw-rw----. 1 root disk 8, 0 Aug 1 21:14 /dev/sda
brw-rw----. 1 root disk 8, 1 Aug 1 21:14 /dev/sda1
[[email protected] httpd-2.4.27]#ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Aug 1 21:14 /dev/zero
[[email protected] httpd-2.4.27]#cp -a /dev/sda /app
[[email protected] httpd-2.4.27]#ll /app/sda
brw-rw----. 1 root disk 8, 0 Aug 1 21:14 /app/sda cp -a 复制设备保留全属性
[[[email protected] httpd-2.4.27]#mknod /app/sda1 b 8 1 在app下创建与/dev/sda1相同的块设备
[[email protected] httpd-2.4.27]#ll /app
total 4
brw-rw----. 1 root disk 8, 0 Aug 1 21:14 sda
brw-r--r--. 1 root root 8, 1 Aug 2 19:18 sda1 设备号相同 但权限发生改变
[[email protected] httpd-2.4.27]#mkdir /mnt/sda1
[[email protected] httpd-2.4.27]#mount /app/sda1 /mnt/sda1
[[email protected] httpd-2.4.27]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4227636 43477136 9% /
tmpfs 953640 228 953412 1% /dev/shm
/dev/sda3 9948012 22476 9413536 1% /app
/dev/sda1 999320 40128 906764 5% /boot
/dev/sr0 3878870 3878870 0 100% /media/CentOS_6.9_Final
/app/sda1 999320 40128 906764 5% /mnt/sda1
[[email protected] httpd-2.4.27]#cd /mnt/sda1
[[email protected] sda1]#ls
config-2.6.32-696.el6.x86_64 initramfs-2.6.32-696.el6.x86_64.img symvers-2.6.32-696.el6.x86_64.gz
efi initrd-2.6.32-696.el6.x86_64kdump.img System.map-2.6.32-696.el6.x86_64
grub lost+found vmlinuz-2.6.32-696.el6.x86_64
[[email protected] sda1]#cd /boot
[[email protected] boot]#ls
config-2.6.32-696.el6.x86_64 initramfs-2.6.32-696.el6.x86_64.img symvers-2.6.32-696.el6.x86_64.gz
efi initrd-2.6.32-696.el6.x86_64kdump.img System.map-2.6.32-696.el6.x86_64
grub lost+found 、
/app/sda1 与/dev/sda1为相同设备号 为同一设备 它们的挂载点/mnt/sda1 /boot访问内容相同
[[email protected] boot]#umount /mnt/sda1 取消挂载
CHS ü 采用24bit位寻址 ü 其中前10位表示cylinder,中间8位表示head,后面6位表示 sector。 ü 最大寻址空间8GB
LBA(logical block addressing) ü LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址 ü LBA采用48个bit位寻址 ü 最大寻址空间128PB
磁盘容量大于大概8GB时,则只能使用LBA寻址方式
两种分区方式:MBR,GPT
MBR 使用32位表示扇区 数,分区不超过2T
v0磁道0扇区就叫MBR
512bytes 446bytes: boot loader
启动计算机和出错信息 MBR+Bios 操作系统启动
64bytes:分区表 重要
存的是硬盘的分区情况 16bytes标识一个分区 最多4个 只有一个活动分区
2bytes: 55AA 重要
表示磁盘是有分区的
v4个主分区;3主分区+1扩展(N个逻辑分区)
GPT
使用128位UUID(Universally Unique Identifier) 表示磁盘 和分区
GPT分区表自动备份在头和尾两份,并有CRC校验位 v
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动 GPT+UEFI 操作系统启动
EFI部分又可以分为5个区域:MBR保护区(与MBR兼容)、EFI信息区(GPT头部)、分区表、GPT分区、备份区域
MBR+BIOS sda + gpt sdb (MBR保护区与MBR兼容)
管理分区
v 列出块设备 ? lsblk
v 创建分区使用:
? fdisk 创建MBR分区
? gdisk 创建GPT分区
? parted 高级分区操作
parted命令
parted的操作都是实时生效的,小心使用
v 用法:parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos 指明分区方式
parted /dev/sdb print 显示硬盘分区信息
parted /dev/sdb mkpart primary 1 200 (默认M) 创建分区
parted /dev/sdb rm 1 删除分区
parted -l 查看分区类型
[[email protected] ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 48.8G 0 part /
├─sda3 8:3 0 9.8G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 30G 0 disk
sdd 8:48 0 40G 0 disk
sde 8:64 0 50G 0 disk
[[email protected] ~]#hexdump -c -n 512 /dev/sdb sdb前512个字节 后5a为为0 空的 未分区
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000200
[[email protected] ~]#parted /dev/sdb mklabel gpt
[[email protected] ~]#hexdump -C -n 512 /dev/sdb
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001c0 01 00 ee fe ff ff 01 00 00 00 ff ff 7f 02 00 00 |................|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 55 aaMBR保护区 与MBR兼容
[[email protected] ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
[[email protected] ~]#parted /dev/sdb mkpart primary 1 1024
[[email protected] ~]#parted /dev/sdb print
Number Start End Size File system Name Flags
1 1049kB 1024MB 1023MB primary
[[email protected] ~]#parted /dev/sdb mklabel msdos
[[email protected] ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
由于表结构不同 gpt msdos(MPR)转换为破坏性转换 禁止该操作
[[email protected] ~]#parted /dev/sdb mkpart primary 1 1024
[[email protected] ~]#parted /dev/sdb mkpart primary 1025 3045
[[email protected] ~]#parted /dev/sdb print
Number Start End Size Type File system Flags
[[email protected] ~]#parted /dev/sdb print
1 1049kB 1024MB 1023MB primary
2 1025MB 3045MB 2020MB primary
[[email protected] ~]#parted /dev/sdb rm 2
分区工具fdisk和gdisk
gdisk 处理gpt分区
gdisk|fdisk /dev/sda 管理分区如创建等 在创建分区切勿操作如 gdisk|fidsk /dev/sda1 错误操作
[[email protected] ~]#dd if=/dev/zero of=/dev/sdb bs=1 count=512
[[email protected] ~]#gdisk -l /dev/sdb
Number Start (sector) End (sector) Size Code Name
1 2048 2000895 976.0 MiB 8300 Linux filesystem
2 2000896 6291456 2.0 GiB 8300 Linux filesystem
3 6293504 16779263 5.0 GiB 8300 Linux filesystem
对于gpt分区 破坏文件的分区表 由于gpt存在备份区域 所以无影响
对于MBR分区 如果一个磁盘已经分区 破坏分区表 分区会被破坏 已分区变为未分区磁盘
[[email protected] ~]#dd if=/dev/zero of=/dev/sda bs=1 count=512
清空/dev/sda 磁盘分区表 破坏引导启动 破坏分区 生产中切勿此操作
[[email protected] ~]$dd if=/dev/sdb of=/dev/sdc bs=1 count=512
sdc分区与同sdb分区相同 因为分区表一样 使其分区大小 分区类型相同
同步分区表
分区表在磁盘的mbr分区以及内存中 /dev/sdd为例
parted /dev/sdd print ; gdisk|fdisk -l /dev/sdd 查看磁盘的分区表
lsblk ; ls /dev/sdd*; cat /etc/partitions 查看保存在内存中分区表
将磁盘分区同步到内存中
CentOS 5,7: 使用partprobe
partprobe [/dev/DEVICE]
partprobe /dev/sdd
Centos6:
对新增分区 用 partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
对删除分区用 (对比磁盘内存分区表 进行删除)partx -d --nr M-N /dev/DEVICE
工具dd 写入磁盘
/dev/zero------文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。
/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
v 备份MBR: dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
v 破坏MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
v 有一个大与2K的二进制文件fileA。现在想从第64个字节位置 开始读取,需要读取的大小是128Byts。又有fileB, 想把上 面读取到的128Bytes写到第32个字节开始的位置,替换 128Bytes,实现如下:
#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
v 备份: dd if=/dev/sdx of=/dev/sdy 将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image 将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz 备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径 v
v恢复: dd if=/path/to/image of=/dev/sdx 将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx 将压缩的备份文件恢复到指定盘
v修复硬盘
dd if=/dev/sda of=/dev/sda 当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会 产生消磁点。当磁头读到这些区域时会遇到困难,并可能 导致I/O错误。当这种情况影响到硬盘的第一个扇区时, 可能导致硬盘报废。上边的命令有可能使这些数据起死回 生,且这个过程是安全高效的
以上是关于磁盘基础知识的主要内容,如果未能解决你的问题,请参考以下文章