磁盤基礎知識
[root@centos6 httpd-2.4.27]#echo '- - -'>/sys/class/scsi_host/host2/scan
塊設備:block,存取單位“塊”,磁盤 隨機讀寫 如/dev/sda
字符設備:char,存取單位“字符”,鍵盤 順序讀寫 如 /dev/zero /dev/null
設備號碼:
主設備號:major number, 標識設備類型
次設備號:minor number, 標識同一類型下的不同設備
[root@centos6 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
[root@centos6 httpd-2.4.27]#ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Aug 1 21:14 /dev/zero
[root@centos6 httpd-2.4.27]#cp -a /dev/sda /app
[root@centos6 httpd-2.4.27]#ll /app/sda
brw-rw----. 1 root disk 8
[[root@centos6 httpd-2.4.27]#mknod /app/sda1 b 8 1 在app下創建與/dev/sda1相同的塊設備
[root@centos6 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 設備號相同 但權限發生改變
[root@centos6 httpd-2.4.27]#mkdir /mnt/sda1
[root@centos6 httpd-2.4.27]#mount /app/sda1 /mnt/sda1
[root@centos6 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
[root@centos6 httpd-2.4.27]#cd /mnt/sda1
[root@centos6 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
[root@centos6 sda1]#cd /boot
[root@centos6 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訪問內容相同
[root@centos6 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 查看分區類型
[root@centos6 ~]#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
[root@centos6 ~]#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
[root@centos6 ~]#parted /dev/sdb mklabel gpt
[root@centos6 ~]#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兼容
[root@centos6 ~]#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
[root@centos6 ~]#parted /dev/sdb mkpart primary 1 1024
[root@centos6 ~]#parted /dev/sdb print
Number Start End Size File system Name Flags
1 1049kB 1024MB 1023MB primary
[root@centos6 ~]#parted /dev/sdb mklabel msdos
[root@centos6 ~]#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)轉換為破壞性轉換 禁止該操作
[root@centos6 ~]#parted /dev/sdb mkpart primary 1 1024
[root@centos6 ~]#parted /dev/sdb mkpart primary 1025 3045
[root@centos6 ~]#parted /dev/sdb print
Number Start End Size Type File system Flags
[root@centos6 ~]#parted /dev/sdb print
1 1049kB 1024MB 1023MB primary
2 1025MB 3045MB 2020MB primary
[root@centos6 ~]#parted /dev/sdb rm 2
分區工具fdisk和gdisk
gdisk 處理gpt分區
gdisk|fdisk /dev/sda 管理分區如創建等 在創建分區切勿操作如 gdisk|fidsk /dev/sda1 錯誤操作
[root@centos6 ~]#dd if=/dev/zero of=/dev/sdb bs=1 count=512
[root@centos6 ~]#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分區 如果一個磁盤已經分區 破壞分區表 分區會被破壞 已分區變為未分區磁盤
[root@centos6 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=512
清空/dev/sda 磁盤分區表 破壞引導啟動 破壞分區 生產中切勿此操作
[root@centos7 ~]$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錯誤。當這種情況影響到硬盤的第一個扇區時, 可能導致硬盤報廢。上邊的命令有可能使這些數據起死回 生,且這個過程是安全高效的
磁盤基礎知識