Linux雲端計算-06_Linux磁碟管理

shuchaoyang發表於2021-07-13

本章介紹硬碟簡介、硬碟資料儲存方式、如何在企業生產伺服器新增硬碟、對硬碟進行分割槽、初始化、掛載等。

1  計算機硬碟簡介

硬碟是計算機主要儲存媒介之一,由一個或者多個鋁製或者玻璃制的碟片組成,碟片外覆蓋有鐵磁性材料,硬碟內部由磁軌、柱面、扇區、磁頭等部件組成,如圖所示:

img

Linux系統中硬體裝置相關配置檔案存放在/dev下,常見硬碟命名:/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda。不同硬碟介面,在系統中識別的裝置名稱不一樣。

IDE硬碟介面在Linux中裝置名為/dev/hda,SAS、SCSI、SATA硬碟介面在Linux中裝置名為sda,高效雲盤硬碟介面會識別為/dev/vda等。

檔案儲存在硬碟上,硬碟的最小儲存單位叫做Sector(扇區),每個Sector儲存512位元組。作業系統在讀取硬碟的時候,不會逐個Sector的去讀取,這樣效率非常低,為了提升讀取效率,作業系統會一次性連續讀取多個Sector,即一次性讀取多個Sector稱為一個Block(塊)。

由多個Sector組成的Block是檔案存取的最小單位。Block的大小常見的有1KB、2KB、4KB,Block在Linux中常設定為4KB,即連續八個Sector組成一個Block。

可以透過如下方法檢視Linux分割槽的Block大小:

[root@superman-vm01 ~]# stat /boot | grep "IO Block" 

 Size: 4096            Blocks: 8          IO Block: 4096   directory
[root@superman-vm01 ~]#

例如建立一個普通檔案,檔案大小為10Bytes,而預設設定Block為4K,如果有1萬個小檔案,由於每個Block只能存放一個檔案,如果檔案的大小比Block大,會申請更多的Block,相反如果檔案的大小比預設Block小,仍會佔用一個Block,這樣剩餘的空間會被浪費掉。

  • 1萬個檔案理論只佔用空間大小:10000x10=100000Bytes=97.65625MBytes;

  • 1萬個檔案真實佔用空間大小:10000x4096Bytes=40960000Bytes=40000MBytes=40GB;

  • 根據企業實際需求,此時可以將Block設定為1K,從而節省更多的空間。

2  硬碟Block及Inode詳解

通常而言,作業系統對於檔案資料的存放包括兩個部分:檔案內容、許可權及檔案屬性。作業系統檔案存放是基於檔案系統,檔案系統會將檔案的實際內容儲存到Block中,而將許可權與屬性等資訊存放至Inode中。

在硬碟分割槽中,還有一個超級區塊 (SuperBlock) ,SuperBlock會記錄整個檔案系統的整體資訊,包括Inode、Block總量、使用大小、剩餘大小等資訊,每個inode與block都有編號對應,方便Linux系統快速定位查詢檔案。

  • Superblock:記錄檔案系統的整體資訊,包括inode與block的總量、使用大小、剩餘大小, 以及檔案系統的格式與相關資訊等;

  • Inode:記錄檔案的屬性,許可權,同時會記錄該檔案的資料所在的block編號;

  • Block:儲存檔案的內容,如果檔案超過預設Block大小,會自動佔用多個Block。

因為每個inode與block都有編號,而每個檔案都會佔用一個inode ,inode內則有檔案資料放置的block號碼。如果能夠找到檔案的inode,就可以找到該檔案所放置資料的block號碼,從而讀取該檔案內容。

作業系統進行格式化分割槽時,作業系統自動將硬碟分成兩個區域。一個是資料Block區,用於存放檔案資料;另一個是Inode Table區,用於存放inode包含的元資訊。

每個inode節點的大小,可以在格式化時指定,預設為128Bytes或256Bytes,/boot分割槽Inode預設為128Bytes,其它分割槽預設為256Bytes,檢視Linux系統Inode方法如下:

[root@superman-vm01 ~]# stat /boot | grep "Inode"   

Device: 801h/2049d      Inode: 64          Links: 5
[root@superman-vm01 ~]#

3  硬連結介紹

一般情況下,檔名和inode編號是一一對應的關係,每個inode號碼對應一個檔名。但UNIX/Linux系統多個檔名也可以指向同一個inode號碼。這意味著可以用不同的檔名訪問同樣的內容,對檔案內容進行修改,會影響到所有檔名。但刪除一個檔名,不影響另一個檔名的訪問。這種情況就被稱為硬連結(hard link)。

建立硬連結的命令為:ln superman1.txt superman2.txt,其中superman1.txt為原始檔,superman2.txt為目標檔案。如上命令原始檔與目標檔案的inode號碼相同,都指向同一個inode。inode資訊中有一項叫做"連結數",記錄指向該inode的檔名總數,這時會增加1,變成2,如圖7-3所示:

image-20210710220855576

同樣刪除一個superman2.txt檔案,就會使得superman1.txt inode節點中的"連結數"減1。如果該inode值減到0,表明沒有檔名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域,如圖所示:

image-20210710221031839

實用小技巧:硬連結不能跨分割槽連結,硬連結只能對檔案生效,對目錄無效,也即是目錄不能建立硬連結。硬連結原始檔與目標檔案共用一個inode值,從某種意義上來,節省inode空間。不管是單獨刪除原始檔還是刪除目標檔案,檔案內容始終存在。同時連結後的檔案不佔用系統多餘的空間。

4  軟連結介紹

除了硬連結以外,還有一種連結-軟連結。檔案superman1.txt和檔案superman2.txt的inode號碼雖然不一樣,但是檔案superman2.txt的內容是檔案superman1.txt的路徑。讀取檔案superman2.txt時,系統會自動將訪問者導向檔案superman1.txt。

無論開啟哪一個檔案,最終讀取的都是檔案superman1.txt。這時,檔案superman2.txt就稱為檔案superman1.txt的"軟連結"(soft link)或者"符號連結(symbolic link)。

檔案superman2.txt依賴於檔案superman1.txt而存在,如果刪除了檔案superman1.txt,開啟檔案superman2.txt就會報錯:"No such file or directory"。

軟連結與硬連結最大的不同是檔案superman2.txt指向檔案superman1.txt的檔名,而不是檔案superman1.txt的inode號碼,因此檔案superman1.txt的inode連結數不會發生變化,如圖所示:

image-20210710221714496

實用小技巧:軟連結可以跨分割槽連結,軟連結支援目錄同時也支援檔案的連結。軟連結原始檔與目標檔案Inode不相同,從某種意義上來說,會消耗inode空間。不管是刪除原始檔還是重啟系統,該軟連結還存在,但是檔案內容會丟失,一旦新建源同名檔名,軟連結檔案恢復正常。

5  Linux下磁碟實戰操作命令

企業真實場景由於硬碟常年大量讀寫,經常會出現壞盤,需要更換硬碟。或者由於磁碟空間不足,需新增新硬碟,新新增的硬碟需要經過格式化、分割槽才能被Linux系統所使用,虛擬機器CentOS 7 Linux模擬真實伺服器新增一塊新硬碟,不需要關機,直接插入用硬碟即可,一般硬碟均支援熱插拔功能。企業中新增新硬碟的操作流程如下:

5.1 fdisk分割槽命令引數

常用引數包括m、n、p、e、d、w。

b      編輯bsd disklabel;

c      切換dos相容性標誌;
d      刪除一個分割槽;
g      建立一個新的空GPT分割槽表;
G      建立一個IRIX(SGI)分割槽表;
l      列出已知的分割槽型別;
m      列印幫助選單;
n      新增一個新分割槽;
o      建立一個新空DOS分割槽表;
p      列印分割槽表資訊;
q      退出而不儲存更改;
s      建立一個新的空的Sun磁碟標籤;
t      更改分割槽的系統ID;
u      更改顯示/輸入單位;
v      驗證分割槽表;
w      將分割槽表寫入磁碟並退出;
x      額外功能。

5.2 檢測識別的硬碟裝置

新新增硬碟被識別為/dev/sdb,如果有多塊硬碟,會依次識別成/dev/sdc、/dev/sdd等裝置名稱,如圖所示:

fdisk -l  

image-20210710222157301

5.3 建立磁碟分割槽

基於新硬碟/dev/sdb裝置,建立磁碟分割槽/dev/sdb1,如圖所示:

fdisk /dev/sdb  

img

5.4 建立/dev/sdb1分割槽方法

fdisk /dev/sdb,然後按n-p-1-Enter鍵-Enter鍵-Enter鍵-w,最後執行fdisk -l|head -10,如圖(a)、圖(b)所示:

image-20210710223121982

(a)fdisk /dev/sdb建立/dev/sdb1分割槽

image-20210710223438391

(b)  fdisk –l檢視/dev/sdb1分割槽

5.5 格式化分割槽

mkfs.xfs /dev/sdb1格式化磁碟分割槽,如圖所示:

image-20210710223928512

5.6 掛載分割槽

/dev/sdb1分割槽格式化後,使用mount命令掛載到/data/目錄,並加入/etc/fstab開機啟動,如圖所示:

# 建立/data/資料目錄

mkdir /data

# 掛載/dev/sdb1分割槽至/data/目錄
mount /dev/sdb1 /data

# 檢視磁碟分割槽詳情
df -h

# 開機自動掛載(永久掛載)
echo "/dev/sdb1        /data                       xfs     defaults        0 0" >>/etc/fstab

img

6  基於GPT格式磁碟分割槽

MBR分割槽標準決定了MBR只支援在2TB以下的硬碟,為了支援能使用大於2T硬碟空間,需使用GPT格式進行分割槽。建立大於2TB的分割槽,需使用parted工具。

在企業真實環境中,通常一臺伺服器有多塊硬碟,整個硬碟容量可能為10T,需要基於GTP格式對10T硬碟進行分割槽,操作步驟如下:

# 新建/dev/sdb的磁碟標籤型別為GPT

parted /dev/sdb mklabel gpt

# 將/dev/sdb整個空間分給同一個分割槽
parted /dev/sdb mkpart primary 0 100%

# 忽略警告
ignore

# 格式化分割槽
mkfs.xfs /dev/sdb1

# 建立掛載目錄
mkdir /data

# 臨時掛載
mount /dev/sdb1 /data

# 開機自動掛載(永久掛載)
echo "/dev/sdb1        /data                       xfs     defaults        0 0" >>/etc/fstab

6.1 檢測識別的硬碟裝置

fdisk -l

如圖所示,假設/dev/sdb 為10T硬碟,使用GPT格式來格式化磁碟:

image-20210710222157301

6.2 設定分割槽型別為GPT格式

6.2.1 非互動方式

執行命令:parted -s /dev/sdb mklabel gpt和parted /dev/sdb mkpart primary 0 100%如圖所示:

image-20210710235354295

image-20210710235459823

6.2.2 互動方式

parted命令列也可以進行分割槽,如圖(a)、(b)、(c)所示:

parted > select /dev/sdb > mklabel gpt > mkpart primary 0 -1 > print > quit

image-20210710234226445

Linux雲端計算-06_Linux磁碟管理

6.3 格式化磁碟

基於mkfs.xfs /dev/sdb格式化磁碟,如圖所示:

image-20210710231710226

6.4 掛載分割槽

建立掛載目錄並掛載:

image-20210710235730459

7  Mount命令工具

Mount命令工具主要用於將裝置或者分割槽掛載至Linux系統目錄下,Linux系統在分割槽時,也是基於mount機制將/dev/sda分割槽掛載至系統目錄,將裝置與目錄掛載之後,Linux作業系統方可進行檔案的儲存。

7.1 Mount命令引數詳解

如下為企業中Mount命令常用引數詳解:

mount [-Vh]

mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
-V:                       顯示mount工具版本號;
-l:                       顯示已載入的檔案系統列表;
-h:                       顯示幫助資訊並退出;
-v:                       輸出指令執行的詳細資訊;
-n:                       載入沒有寫入檔案/etc/mtab中的檔案系統;
-r:                       將檔案系統載入為只讀模式;
-a:                       載入檔案/etc/fstab中配置的所有檔案系統;
-o:                     指定mount掛載擴充套件引數,常見擴充套件指令:rw、remount、loop等,其中-o相關指令如下:
-o atime:      系統會在每次讀取文件時更新文件時間;
-o noatime:      系統會在每次讀取文件時不更新文件時間;
-o defaults:      使用預設的選項 rw,suid,dev,exec,auto,nouser等;
-o exec                          允許執行檔被執行;
-o user、-o nouser:       使用者可以執行 mount/umount的動作;
-o remount:       將已掛載的系統分割槽重新以其他再次模式掛載;
-o ro:        只讀模式掛載;
-o rw:        可讀可寫模式掛載;
-o loop                           使用loop模式,把檔案當成裝置掛載至系統目錄。
-t:                        指定mount掛載裝置型別,常見型別nfs、ntfs-3g、vfat、iso9660等,其中-t相關指令如下:
iso9660                           光碟或光碟映象;
msdos                            Fat16檔案系統;
vfat                             Fat32檔案系統;
ntfs                           NTFS檔案系統;
ntfs-3g                           識別行動硬碟格式;
smbfs                            掛載Windows檔案網路共享;
nfs                            Unix/Linux檔案網路共享。

7.2 企業常用Mount案例

Mount常用案例如下:

7.2.1 掛載/dev/sdb1分割槽至/data/目錄

mount /dev/sdb1 /data

image-20210712173940561

7.2.2 掛載cdrom光碟至/mnt目錄

mount /dev/cdrom /mnt

image-20210712174142107

7.2.3 掛載/dev/sdb1行動硬碟至/data目錄

mount -t ntfs-3g /dev/sdb1 /data

image-20210712191557169

image-20210712191804532

注意: 如果提示未知的檔案系統型別“ntfs”,請執行”yum install -y ntfs-3g“安裝ntfs-3g軟體包。

7.2.4 重新以讀寫模式掛載/系統

mount -o remount,rw /

image-20210712174334437

7.2.5 將CentOS-7-x86_64-DVD-1810.iso映象檔案掛載至/mnt目錄

mount -t iso9660 -o loop CentOS-7-x86_64-DVD-1810.iso /mnt

image-20210712192457127

7.2.6 將隨身碟/dev/sdd1掛載至/mnt/目錄

mount -t vfat /dev/sdb1 /mnt

image-20210712173707277

image-20210712173807502

7.2.7 將遠端192.168.1.182:/data目錄掛載至本地/data目錄

mount -t nfs 192.168.1.182:/data/ /data

image-20210712192948923



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/291614/viewspace-2780961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章