磁盤基礎知識

新加硬盤識別   (磁盤設備名是不穩定的 在生產中有關磁盤的配置文件 需注意)

[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 80 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, 0 Aug  1 21:14 /app/sda           cp -a 複製設備保留全屬性

[[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

LBAlogical block addressing Ü LBA是一個整數,通過轉換成CHS格式完成磁盤具體尋址 Ü LBA採用48bit位尋址 Ü 最大尋址空間128PB

磁盤容量大於大概8GB時,則只能使用LBA尋址方式

 

兩種分區方式:MBRGPT

MBR  使用32位表示扇區 數,分區不超過2T

v0磁道0扇區就叫MBR

512bytes            446bytes: boot loader 

                              啓動計算機和出錯信息   MBR+BIOS 操作系統啓動

                              64bytes:分區表 重要

                      存的是硬盤的分區情況  16bytes標識一個分區 最多4 只有一個活動分區

                              2bytes: 55AA   重要

                              表示磁盤是有分區的

v4個主分區;3主分區+1擴展(N個邏輯分區)

 

 GPT

 使用128UUID(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                        sdb512個字節   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 msdosMPR)轉換爲破壞性轉換  禁止該操作

[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

 

分區工具fdiskgdisk

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 57: 使用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錯誤。當這種情況影響到硬盤的第一個扇區時, 可能導致硬盤報廢。上邊的命令有可能使這些數據起死回 ,且這個過程是安全高效的

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章