全新的硬碟沒有做任何處理,對於作業系統是無法使用的,必須修進行硬碟分割及格式化之後才能有效的掛載及使用。
1. 分割硬碟
分割硬碟並不是物理上的分割,而是透過程式在磁區上標記要如何做分割,透過分割硬碟可以有效管理空間及創建 SWAP 分區以減緩記憶體空間不足的問題。
分割的格式區分兩種:
MBR : 傳統的分割格式,最多只能分割四個分割槽,並且無法使用超過 2 TiB 以上硬碟
From access.redhat.com
Tip
雖然 MBR 只能切四個分割槽 ( Primary ),不過能可以擇一個使用 Extented 類型,一個延伸的 Extented 可以再分割多個 Logical 分割槽 ( Linux 作業系統最多支援 15 個 ) 。
GPT : 新式分割格式,不限分割槽 ( Windows 最多只能使用 128) ,可以使用超過 2 Tib 以上硬碟
From access.redhat.com
2. Parted 管理分割硬碟工具
傳統使用的硬碟分割工具為 fdisk 及 gdisk ,一個專門分割 MBR 格式、另一個專門分割 GPT 格式,使用 Parted 這工具都可以使用,並且有交談式及指令式兩種方式可以使用,非常的方便好用。
執行前可以透過 lsblk 檢查目前有哪些硬碟設備
1
2
3
4
5
6
7
8
9
10
11
[ 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
Danger
使用 parted 工具要注意所選的硬碟設備,如因疏失選擇已經有資料的設備或分區,會導致原本的檔案及資料遺失。
2.1 Parted 交談式操作
以 vdb 硬碟操作,並從上述 lsblk 可以看出該硬碟總計有 200M 空間可以使用,並使用 MBR 格式分出一個分割表並使用全部空間。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[ 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 可以選擇。
Note
輸入後類型後,會詢問檔案系統種類,這個任意選擇一個即可( ext4、 xfs 都行),並不會真的使用該檔案系統種類進行格式化。
2.1.3 分割槽的切割起點與終點
起點與終點可以輸入數值 + 單位或是以百分比表示。
單位可以選擇以下:
s : sector 硬碟儲存的最小容量單位
B : byte
MiB 、 GiB、 TiB ( 可以整除 2 )
MB 、 GB 、 TB ( 可以整除 10 )
Tip
起始點以 2048s 開始是一個安全界限的開始,如未能配置好開始的分區導致無法有效對齊,會出現警告,一般都建議從 2048s 為基本起點。
2.1.4 查看分割完後的硬碟狀態
使用 print 可以列出目前選擇裝置的分割表格式有分割哪幾個槽,切割大小等各詳細訊息。
2.1.5 小技巧 Help 查詢使用方式
上述步驟的指令要全部記起來,不是很容易的一件事情,不過透過交談式可以清楚知道哪些類型可以使用,只要知道分割硬碟有哪些步驟都可以透過 help 查詢。
查看有哪些功能可以使用
1
2
3
4
5
6
7
8
( 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
...
查看分割表格式有哪些可以選
1
2
3
4
( 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
查看檔案系統格式化有哪些種類
1
2
3
4
5
6
7
8
( 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 空間。
1
2
3
4
5
6
7
8
9
[ 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 可以將已經分割好的設備裝置進行格式化。
1
2
3
4
5
6
7
8
9
10
11
12
[ 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 可以將已經分割好的設備裝置進行格式化。
1
2
3
4
5
6
7
8
9
10
11
12
[ 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 可以將已經分割好的設備裝置進行格式化。
1
2
3
[ 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 選擇分割好的設備並掛載到指定的目錄,即可使用。
1
mount < device > < mount dir >
創建一個目錄 /xfs ,並將以 xfs 格式化的分割槽掛載 。
1
2
3
4
5
6
[ 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掛載
掛載 swap 分區使用 swapon < device > 即可,可以 free 查看掛載的 swap。
4.2 開機自動掛載
使用手動 mount 掛載雖然快速 ,不過每次開機都要重複執行 mount ,只要將內容寫至 /etc/fstab 就可以讓系統自動處理。
/etc/fstab 欄位說明:
1
2
#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 內,並讓其自動掛載生效。
1
2
3
4
5
6
7
8
9
[ 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
swap掛載
寫入 /etc/fstab 將欄位二及欄位三更改 swap ,其餘方式與一般設備寫法一致。
Danger
請於編輯完使用 mount -a 掛載並檢查,如果 /etc/fstab 欄位遺漏或是寫錯會導致系統無法開機,需特別注意!!!
4.3 掛載硬碟使用 UUID 好處在哪?
上述看到掛載硬碟可以直接使用設備號碼也可以使用設備的 UUID 進行掛載,那時麼時候需要用UUID掛載呢?
建議所有的實體硬碟,務必要使用 UUID 掛載,因為電腦機器在識別是以第幾顆硬碟來當作號碼,如果今天第一個插槽及最後一個插槽都有掛上硬碟,對於電腦而言該設備號碼為 a 及 b ,不過再添加一個硬碟在第一個位置,對電腦而言新的設備號碼會被取代為 b ,這樣就會導致系統開機出現問題。
查看設備 UUID 方式很容易,使用 lsblk 加參數就可以看到。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ 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
使用 serverc 環境來練習,使用 /dev/vdc 創建一個 SWAP 分區為 200 Mib 大小;使用 /dev/vdd 分割一個 150 Mib 大小的 xfs 掛載至 xfs 目錄,另外再分割一個 200 Mib 大小的 ext3 掛載 ext3 目錄, 上述內容均要能再開機後自動掛載。
5.2 LAB 解答
Note
所創建分區大小很難與題目要求百分百一致,正負 10% 以內都是合理範圍。
5.2.1. 掛載 swap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 掛載前檢查
[ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ 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 重新開機
確保重新開機後,所有目錄都正常掛載。
Tip
如果無法正常開機,表示 /etc/fstab 中有錯誤,可以至 bastion 機器執行 rht-vmctl reset serverc 重置 serverc 回初始設定。
6. 小結
操作硬碟分割、格式化及掛載是 Linux 的基本功,熟悉方式就是不斷的練習才是不二法門,透過練習才能掌握這個必備的技術。