iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

磁碟空間與掛載

磁碟資訊

在 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/

  1. 備份 /etc/fstab 檔案

    root# cp -a /etc/fstab /etc/fstab_backup
    
  2. 查出 /dev/sdb ID

    root# blkid /dev/sdb
    /dev/sdb: UUID="2afefffd-XXXX-YYYY-ZZZZ-e7440e1aedac" TYPE="xfs"
    

    查出的 UUID 應會與上列不同,必須將它記錄起來。

  3. 編輯 /etc/fstab 檔案

    在最後一行新增
    ...
    
    UUID=2afefffd-XXXX-YYYY-ZZZZ-e7440e1aedac /mydata xfs defaults 0 0
    

    UUID 為 blkid 查出的 ID。

  4. 卸載 /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/ 現在和根目錄使用同一個磁碟空間。

  5. 測試 /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 檔案是否正確。

  6. 重新開機

    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 系列做法有差異的部份。


上一篇
Day 22: 檔案系統介紹
下一篇
Day 24: 使用網路工具
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言