Contents

Linux - 硬碟的分割及掛載

全新的硬碟沒有做任何處理,對於作業系統是無法使用的,必須修進行硬碟分割及格式化之後才能有效的掛載及使用。

1. 分割硬碟

分割硬碟並不是物理上的分割,而是透過程式在磁區上標記要如何做分割,透過分割硬碟可以有效管理空間及創建 SWAP 分區以減緩記憶體空間不足的問題。

分割的格式區分兩種:

  1. MBR : 傳統的分割格式,最多只能分割四個分割槽,並且無法使用超過 2 TiB 以上硬碟

https://i.imgur.com/dhPNUMm.png
From access.redhat.com

Tip
雖然 MBR 只能切四個分割槽 ( Primary ),不過能可以擇一個使用 Extented 類型,一個延伸的 Extented 可以再分割多個 Logical 分割槽 ( Linux 作業系統最多支援 15 個 )
  1. GPT : 新式分割格式,不限分割槽 ( Windows 最多只能使用 128) ,可以使用超過 2 Tib 以上硬碟

https://i.imgur.com/Z5oHmz0.png
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 分割槽的切割起點與終點

起點與終點可以輸入數值 + 單位或是以百分比表示。

單位可以選擇以下:

  1. s : sector 硬碟儲存的最小容量單位
  2. B : byte
  3. MiB 、 GiB、 TiB ( 可以整除 2 )
  4. MB 、 GB 、 TB ( 可以整除 10 )
Tip
起始點以 2048s 開始是一個安全界限的開始,如未能配置好開始的分區導致無法有效對齊,會出現警告,一般都建議從 2048s 為基本起點。

2.1.4 查看分割完後的硬碟狀態

使用 print 可以列出目前選擇裝置的分割表格式有分割哪幾個槽,切割大小等各詳細訊息。

2.1.5 小技巧 Help 查詢使用方式

上述步驟的指令要全部記起來,不是很容易的一件事情,不過透過交談式可以清楚知道哪些類型可以使用,只要知道分割硬碟有哪些步驟都可以透過 help 查詢。

  1. 查看有哪些功能可以使用
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. 查看分割表格式有哪些可以選
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. 查看檔案系統格式化有哪些種類
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
mkfs.xfs  < device >
 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
mkfs.ext4  < device >
 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
mkswap  < device >
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
  1. 欄位一 : 硬碟設備或是 UUID
  2. 欄位二 : 掛載的目錄
  3. 欄位三 : 檔案系統種類
  4. 欄位四 : 掛載參數 ( deafults 預設使用 rw, suid, dev, exec, auto, nouser, async 幾個參數)
  5. 欄位五 : 是否啟用 dump 備份 , 0 為關閉
  6. 欄位六 : 是否開機執行 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

練習環境
可以使用 HowHow 的創建 Lab 練習環境,操作錯誤導致系統失敗可以直接重置還原,使用方式請參閱 HowHow 網站

使用 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 的基本功,熟悉方式就是不斷的練習才是不二法門,透過練習才能掌握這個必備的技術。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!