在 Linux 中,磁碟在格式化後是以掛載到目錄的方式進行使用,並不像 Windows 裡的 C:\、D:\ 等方式有平行儲存槽的概念。
我們可以使用先前章節介紹的 df
指令來查看磁碟或分割區的空間與數量使用狀況,讓管理員知道是否有足夠量讓應用系統使用。
本章要介紹的是把一個新磁碟加入後,在作業系統啟用該磁碟的的具體流程。
由於現今大多的主機都已經被虛擬化,各應用程式也都往應用程式、檔案與系統分離的概念進行設計,所以我們可以很方便獨立一個虛擬化 Disk 出來供虛擬機使用。在這個條件下傳統磁碟分割需求也較無必要性,本章節就不討論此一部份。
由於新型的應用系統設計通常需要能夠滿足大檔案和高吞吐量的特性,且在擴充時最好也能夠在不停機的情況下執行,我們在此介紹 Red Hat Enterprise Linux 7 開始引用的 XFS 檔案系統格式,以滿足這些需求。
我們可以使用 lsblk
列出系統中有被認出的磁碟設備,它能夠列出磁碟的容量與掛載點資訊,在實做之前讓管理者明確辨識要處理的目標。
使用 lsblk
後的結果範例如下:
student$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 9G 0 part
├─rl-root 253:0 0 8G 0 lvm /
└─rl-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 2G 0 disk
sr0 11:0 1 1024M 0 rom
以上輸出的列表中可以看到有一個 sdb
配有 2G 空間,且沒有被掛載使用,事實上這也是我們新增的磁碟。sdb
的項目實際上是位於 /dev/
裝置目錄中,所以該裝置檔案為 /dev/sdb
。
系統要能夠使用該磁碟,至少要將它進行格式化,也就是分配檔案系統,如此才可以把文件儲存進去。
一旦確認目標後,可以使用 mkfs.xfs
指令將他直接格式化以供稍後使用。
student$ sudo mkfs.xfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
完成後,我們把格式化完成的磁碟掛載到 /mydata/
目錄供系統使用。
透過下列方式新增目錄:
student$ sudo mkdir /mydata/
已格式化完成後的磁碟還不能直接使用,必須透過系統提供的掛載 mount
指令將磁碟掛載到 /mydata
裡。
在 Linux 和其他 Unix 類作業系統中,mount
是用於掛載(mount
)檔案系統到特定目錄(稱為 掛載點)的指令。簡單地說,掛載是一個過程,通過這個過程我們可以將一個儲存設備或是把一個遠端文件系統接入到本機目錄中,讓我們使這些儲存空間就像在本機操作一樣。
使用下列方式進行掛載:
student$ sudo mount /dev/sdb /mydata/
掛載完成後,再次使用 df
指令查看 /mydata/
的容量資訊:
student$ sudo df -h /mydata
在上述的輸出,如果有看到掛載點有獨立的 /mydata/
訊息,代表這個目錄有獨立的空間使用而不和根目錄 (/
) 共用。也可以透過此方式確認是否有正確的掛載成功。
現在我們可以進行測試,在 /mydata/
目錄中建立 f1.txt
檔案,然後再進行確認:
student$ sudo ls -l /mydata/
student$ sudo touch /mydata/f1.txt
student$ sudo ls -l /mydata/
確認檔案可以正常存取後,我們就可以將這個掛載目錄使用先前介紹的權限設定來指定合適的權限供使用者或應用程式使用,而這些權限也會存在 /dev/sdb
,並跟隨之。以上流程不論在企業內部的虛擬機,或是雲端主機都適用。
在沒有特別設定的情況下,重新開機後磁碟不會自動被掛載到任何目錄,要設定自動掛載的話必須修改 /etc/fstab
檔案。
Linux 開機時會讀取 /etc/fstab
檔案,將必要掛載的項目逐一完成,若設定有誤會造成開機失敗,所以該檔案是重要且內容不可出錯。
以下示範如何將 /dev/sdb
在開機時自動掛載到 /mydata/
備份 /etc/fstab
檔案
root# cp -a /etc/fstab /etc/fstab_backup
查出 /dev/sdb
ID
root# blkid /dev/sdb
/dev/sdb: UUID="2afefffd-XXXX-YYYY-ZZZZ-e7440e1aedac" TYPE="xfs"
查出的
UUID
應會與上列不同,必須將它記錄起來。
編輯 /etc/fstab
檔案
在最後一行新增
...
UUID=2afefffd-XXXX-YYYY-ZZZZ-e7440e1aedac /mydata xfs defaults 0 0
UUID 為
blkid
查出的 ID。
卸載 /mydata
,確認在無使用狀態。
root# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 3.0G 54M 3.0G 2% /mydata
root# cd /
root# umount /mydata/
root# df -h /mydata/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rl-root 8.0G 1.3G 6.8G 16% /
/mydata/
應不會有任何指定的磁碟掛載在上面,因為/mydata/
現在和根目錄使用同一個磁碟空間。
測試 /etc/fstab
是否正確。
root# mount -a
root# df -h /mydata/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 3.0G 54M 3.0G 2% /mydata
mount -a
如有出錯,則代表設定錯誤,請查看/etc/fstab
檔案是否正確。
重新開機
root# reboot
由於虛擬化技術的進步,我們可以動態增加磁碟空間。以往要擴展磁碟空間時需要多個程序,在 XFS 檔案系統的結構下就顯得較優雅快速。
在下列的範例中,原本有 2Gb 的磁碟空間,透過 lsblk
來查看:
student$ sudo lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 2G 0 disk /mydata
我們使用 雲端/虛擬化平台 為虛擬機增加了 1GB 的大小空間,再次檢查如下:
student$ sudo lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 3G 0 disk /mydata
從上輸出可到 sdb
的新容量為 3G。
此時再使用 df
查看 /mydata/
資料夾可用空間:
student$ sudo df -h /mydata/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 2.0G 47M 2.0G 3% /mydata
從 df
的掛載顯示來看,就算磁碟容量增加了,也不會馬上反應到可用空間上,此時我們必須使用 xfs 的擴展工具來進行處理。
xfs_growfs
可以協助我們進行擴展作業,而且不用卸載就可以增加。
執行下列指令完成:
student$ sudo xfs_growfs /mydata
meta-data=/dev/sdb isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 786432
此時使用 df
再次查看:
student$ sudo df -h /mydata/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 3.0G 54M 3.0G 2% /mydata
經由上述的流程,可以很快的擴展使用空間,要留意的是在使用 xfs_growfs
時我們要確定該掛載點正在被使用才能擴展,這是和其它如 ext
系列做法有差異的部份。