Linux – 硬碟的分割及掛載
全新的硬碟沒有做任何處理,對於作業系統是無法使用的,必須修進行硬碟分割及格式化之後才能有效的掛載及使用。
1. 分割硬碟
分割硬碟並不是物理上的分割,而是透過程式在磁區上標記要如何做分割,透過分割硬碟可以有效管理空間及創建 SWAP 分區以減緩記憶體空間不足的問題。
分割的格式區分兩種:
- MBR : 傳統的分割格式,最多只能分割四個分割槽,並且無法使用超過 2 TiB 以上硬碟
雖然 MBR 只能切四個分割槽 ( Primary ),不過能可以擇一個使用 Extented 類型,一個延伸的 Extented 可以再分割多個 Logical 分割槽 ( Linux 作業系統最多支援 15 個 ) 。
- GPT : 新式分割格式,不限分割槽 ( Windows 最多只能使用 128) ,可以使用超過 2 Tib 以上硬碟
2. Parted 管理分割硬碟工具
傳統使用的硬碟分割工具為 fdisk 及 gdisk ,一個專門分割 MBR 格式、另一個專門分割 GPT 格式,使用 Parted 這工具都可以使用,並且有交談式及指令式兩種方式可以使用,非常的方便好用。
執行前可以透過 lsblk 檢查目前有哪些硬碟設備
[root@serverc ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 9G 0 part
├─rl_workstation-root 253:0 0 8G 0 lvm /
└─rl_workstation-swap 253:1 0 1G 0 lvm [SWAP]
vdb 252:16 0 200M 0 disk
vdc 252:32 0 300M 0 disk
vdd 252:48 0 500M 0 disk
使用 parted 工具要注意所選的硬碟設備,如因疏失選擇已經有資料的設備或分區,會導致原本的檔案及資料遺失。
2.1 Parted 交談式操作
以 vdb 硬碟操作,並從上述 lsblk 可以看出該硬碟總計有 200M 空間可以使用,並使用 MBR 格式分出一個分割表並使用全部空間。
[root@serverc ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? msdos
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? xfs
Start? 2048s
End? 100%
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 210MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 210MB 209MB primary xfs lba
步驟分解:
2.1.1 建立分表格式
使用 mklable 可以選擇 MBR 格式或是 GPT,如果使用 MBR 的格式輸入 msdos , GPT 則輸入 gpt。
2.1.2 分割槽的類型
此選項只有選擇 MBR 格式才需要填寫,如使用 gpt 僅只要輸入該分割槽註解的名稱即可, MBR 會有兩種類型 primary 及 extended 可以選擇。
輸入後類型後,會詢問檔案系統種類,這個任意選擇一個即可( ext4、 xfs 都行),並不會真的使用該檔案系統種類進行格式化。
2.1.3 分割槽的切割起點與終點
起點與終點可以輸入數值 + 單位或是以百分比表示。
單位可以選擇以下:
- s : sector 硬碟儲存的最小容量單位
- B : byte
- MiB 、 GiB、 TiB ( 可以整除 2 )
- MB 、 GB 、 TB ( 可以整除 10 )
起始點以 2048s 開始是一個安全界限的開始,如未能配置好開始的分區導致無法有效對齊,會出現警告,一般都建議從 2048s 為基本起點。
2.1.4 查看分割完後的硬碟狀態
使用 print 可以列出目前選擇裝置的分割表格式有分割哪幾個槽,切割大小等各詳細訊息。
2.1.5 小技巧 Help 查詢使用方式
上述步驟的指令要全部記起來,不是很容易的一件事情,不過透過交談式可以清楚知道哪些類型可以使用,只要知道分割硬碟有哪些步驟都可以透過 help 查詢。
- 查看有哪些功能可以使用
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
...
- 查看分割表格式有哪些可以選
(parted) help mktable
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
LABEL-TYPE is one of: atari, aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop
- 查看檔案系統格式化有哪些種類
(parted) help mkpart
mkpart PART-TYPE [FS-TYPE] START END make a partition
PART-TYPE is one of: primary, logical, extended
FS-TYPE is one of: btrfs, nilfs2, ext4, ext3, ext2, fat32, fat16, hfsx, hfs+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs, hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4,
amufs3, amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2, affs1, affs0, linux-swap, linux-swap(new), linux-swap(old)
START and END are disk locations, such as 4GB or 10%. Negative values count from the end of the disk. For example, -1s specifies exactly the last sector.
...
2.2 Parted 指令式操作
指令式操作就是把交談式會做的步驟一氣呵成的輸入,在 shell script 腳本是很常見來使用的方式,選擇 vdc 設備並以 GPT 格式為分割,並切割出約末 150 Mib 空間。
[root@serverc ~]# parted -s /dev/vdc mklabel gpt mkpart gpt-example ext4 2048s 150Mib print
Model: Virtio Block Device (virtblk)
Disk /dev/vdc: 315MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 157MB 156MB ext4 gpt-example
3. 創建檔案系統
執行完分割後,是無法直接掛載使用的,並需創建檔案系統後才能進行掛載,檔案系統大多為: ext 系列、 xfs 及 linux-swap ,其中儲存檔案最常用 xfs 及 ext4 這兩個檔案系統。linux-swap 顧名思義就是給 swap 交換分區使用的。
3.1 創建 xfs 檔案系統
使用 mkfs.xfs 可以將已經分割好的設備裝置進行格式化。
mkfs.xfs < device >
[root@serverc ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=12736 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=50944, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
3.2 創建 ext4 檔案系統
使用 mkfs.ext4 可以將已經分割好的設備裝置進行格式化。
mkfs.ext4 < device >
[root@serverc ~]# mkfs.ext4 /dev/vdc1
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 152576 1k blocks and 38152 inodes
Filesystem UUID: 8c67e55f-03e5-44fe-9587-aae5753b2db5
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
3.3 創建 swap 檔案系統
使用 mkswap 可以將已經分割好的設備裝置進行格式化。
mkswap < device >
[root@serverc ~]# mkswap /dev/vdc2
Setting up swapspace version 1, size = 49 MiB (51376128 bytes)
no label, UUID=1dc93a43-a0a4-4821-b73b-99a1ef64d020
SWAP 空間大小建議值
RAM | SWAP 空間 | SWAP空間 (啟用休眠模式) |
---|---|---|
2 G 或以下 | 2 倍的 RAM | 3 倍的 RAM |
2G – 8G | 與 RAM 同樣 | 2 倍的 RAM |
8G – 64G | 最少 4 G | 1.5 倍的 RAM |
64G 以上 | 最少 4 G | 不建議啟用用休眠 |
4. 掛載硬碟
將硬碟分割及格式化後就可以將其掛載到指定目錄上使用,掛載方式很容易使用 mount 及可達成,不過 mount 只是暫時性的,當系統重機開機後又必須手動進行掛載,好在有 /etc/fstab 方便的助手可以讓我們記錄,並會再開機過程中自動進行掛載。
4.1 mount 手動掛載
使用 mount 選擇分割好的設備並掛載到指定的目錄,即可使用。
mount < device > < mount dir >
創建一個目錄 /xfs ,並將以 xfs 格式化的分割槽掛載 。
[root@serverc ~]# mkdir -v /xfs
mkdir: created directory '/xfs'
[root@serverc ~]# mount /dev/vdb1 /xfs/
[root@serverc ~]# df -h /xfs/
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 194M 12M 183M 6% /xfs
掛載 swap 分區使用 swapon < device > 即可,可以 free 查看掛載的 swap。
4.2 開機自動掛載
使用手動 mount 掛載雖然快速 ,不過每次開機都要重複執行 mount ,只要將內容寫至 /etc/fstab 就可以讓系統自動處理。
/etc/fstab 欄位說明:
#1 #2 #3 #4 #5 #6
UUID=59196483-d800-4fa3-8c10-72513c9f93ab /boot xfs defaults 0 0
- 欄位一 : 硬碟設備或是 UUID
- 欄位二 : 掛載的目錄
- 欄位三 : 檔案系統種類
- 欄位四 : 掛載參數 ( deafults 預設使用 rw, suid, dev, exec, auto, nouser, async 幾個參數)
- 欄位五 : 是否啟用 dump 備份 , 0 為關閉
- 欄位六 : 是否開機執行 fsceck , 0 為關閉
創建一個目錄 /ext4 ,並將以 ext4 格式化的分割槽寫入 /etc/fstab 內,並讓其自動掛載生效。
[root@serverc ~]# mkdir -v /ext4
mkdir: created directory '/ext4'
[root@serverc ~]# cat >> /etc/fstab << EOF
/dev/vdc1 /ext4 ext4 defaults 0 0
EOF
[root@serverc ~]# mount -a
[root@serverc ~]# df -h /ext4/
Filesystem Size Used Avail Use% Mounted on
/dev/vdc1 141M 1.6M 129M 2% /ext4
寫入 /etc/fstab 將欄位二及欄位三更改 swap ,其餘方式與一般設備寫法一致。
請於編輯完使用 mount -a 掛載並檢查,如果 /etc/fstab 欄位遺漏或是寫錯會導致系統無法開機,需特別注意!!!
4.3 掛載硬碟使用 UUID 好處在哪?
上述看到掛載硬碟可以直接使用設備號碼也可以使用設備的 UUID 進行掛載,那時麼時候需要用UUID掛載呢?
建議所有的實體硬碟,務必要使用 UUID 掛載,因為電腦機器在識別是以第幾顆硬碟來當作號碼,如果今天第一個插槽及最後一個插槽都有掛上硬碟,對於電腦而言該設備號碼為 a 及 b ,不過再添加一個硬碟在第一個位置,對電腦而言新的設備號碼會被取代為 b ,這樣就會導致系統開機出現問題。
查看設備 UUID 方式很容易,使用 lsblk 加參數就可以看到。
[root@serverc ~]# lsblk -fp
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/sr0
/dev/vda
├─/dev/vda1 xfs 59196483-d800-4fa3-8c10-72513c9f93ab /boot
└─/dev/vda2 LVM2_member 6YQy3s-SGvB-u8Tt-t3hT-fdZr-xHd7-eKmZpl
├─/dev/mapper/rl_workstation-root xfs e77f3419-e69b-4a2a-8677-43165f90a6e5 /
└─/dev/mapper/rl_workstation-swap swap 589264ff-b23a-437d-8e5e-e45f9d5ebdf5 [SWAP]
/dev/vdb
└─/dev/vdb1 xfs c7ba49dd-8c65-4f54-ac7c-13bec9970493 /xfs
/dev/vdc
├─/dev/vdc1 ext4 97d8b42f-bbd4-48e6-9da9-bed24e0193af /ext4
└─/dev/vdc2 swap 1dc93a43-a0a4-4821-b73b-99a1ef64d020
/dev/vdd
5. LAB 練習
5.1 LAB
可以使用 HowHow 的創建 Lab 練習環境,操作錯誤導致系統失敗可以直接重置還原,使用方式請參閱 HowHow 網站。
使用 serverc 環境來練習,使用 /dev/vdc 創建一個 SWAP 分區為 200 Mib 大小;使用 /dev/vdd 分割一個 150 Mib 大小的 xfs 掛載至 xfs 目錄,另外再分割一個 200 Mib 大小的 ext3 掛載 ext3 目錄, 上述內容均要能再開機後自動掛載。
5.2 LAB 解答
所創建分區大小很難與題目要求百分百一致,正負 10% 以內都是合理範圍。
5.2.1. 掛載 swap
# 掛載前檢查
[root@serverc ~]# free
total used free shared buff/cache available
Mem: 1508408 167488 1085724 8760 255196 1188524
Swap: 1048572 0 1048572
[root@serverc ~]# parted -s /dev/vdc mklabel msdos mkpart primary linux-swap 2048s 201Mib
[root@serverc ~]# mkswap /dev/vdc1
Setting up swapspace version 1, size = 200 MiB (209711104 bytes)
no label, UUID=d5c11287-33bc-432d-9d4c-c3c6777f1256
[root@serverc ~]# cat >> /etc/fstab << EOL
> /dev/vdc1 swap swap defaults 0 0
> EOL
[root@serverc ~]# swapon /dev/vdc1
# 掛載後增加 swap 分區
[root@serverc ~]# free
total used free shared buff/cache available
Mem: 1508408 167912 1085320 8760 255176 1188100
Swap: 1253368 0 1253368
5.2.2. 掛載 /xfs
[root@serverc ~]# parted -s /dev/vdd mklabel msdos mkpart primary xfs 2048s 151Mib
[root@serverc ~]# mkfs.xfs /dev/vdd1
meta-data=/dev/vdd1 isize=512 agcount=4, agsize=9600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=38400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1368, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
[root@serverc ~]# mkdir -v /xfs
mkdir: created directory '/xfs'
[root@serverc ~]# cat >> /etc/fstab << EOL
> /dev/vdd1 /xfs xfs defaults 0 0
> EOL
[root@serverc ~]# mount -a
[root@serverc ~]# df -h /xfs
Filesystem Size Used Avail Use% Mounted on
/dev/vdd1 145M 8.8M 136M 7% /xfs
5.2.3. 掛載 /ext4
[root@serverc ~]# parted -s /dev/vdd mkpart primary ext4 152Mib 352Mib
[root@serverc ~]# mkfs.ext4 /dev/vdd2
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 204800 1k blocks and 51200 inodes
Filesystem UUID: 023a65b7-c2de-45db-852e-53059e5e57f5
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@serverc ~]# mkdir -v /ext4
mkdir: created directory '/ext4'
[root@serverc ~]# cat >> /etc/fstab << EOL
> /dev/vdd2 /ext4 ext4 defaults 0 0
> EOL
[root@serverc ~]# mount -a
[root@serverc ~]# df -h /ext4/
Filesystem Size Used Avail Use% Mounted on
/dev/vdd2 190M 1.6M 175M 1% /ext4
5.2.4. reboot 重新開機
確保重新開機後,所有目錄都正常掛載。
如果無法正常開機,表示 /etc/fstab 中有錯誤,可以至 bastion 機器執行 rht-vmctl reset serverc 重置 serverc 回初始設定。
6. 小結
操作硬碟分割、格式化及掛載是 Linux 的基本功,熟悉方式就是不斷的練習才是不二法門,透過練習才能掌握這個必備的技術。
如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!