1. 程式人生 > >Linux學習—磁盤管理知識點總結

Linux學習—磁盤管理知識點總結

文件類型 字段 block 還需 ast host 所在 替換 分區信息

磁盤管理



目錄

  • 設備文件

  • 磁盤介紹

  • 磁盤分區

  • 創建磁盤分區

  • 同步分區表

  • 文件系統


一、設備文件

設備文件關聯至設備驅動程序,用戶通過操作這些設備文件間接管理對應的硬件設備

一個設備的名稱表示整個磁盤,而分區則用設備名加上一個分區號來表示

設備文件類型:

塊設備 存取單位是,如磁盤

字符設備 存取單位是字符,如鍵盤

為了方便管理這些設備,系統設置了主設備號和次設備號用來區分

看如下示例:

技術分享圖片

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學習—磁盤管理知識點總結