Last Updated on 2024-08-09 by Clay
最近由於工作中的需求、加上一些 Steam 的遊戲在 Windows 中跑起來比較順,我認真地考慮在 Linux 的筆電中重新切割出 200GB 的硬碟空間給 Windows;不過,由於我一開始把一整顆的 1TB SSD 分配給了 Linux,現在只能重新進行磁區的縮放。
我的 SSD 是 NVMe(Non-Volatile Memory Express)協議的固態硬碟,與傳統的 SATA SSD 或 HDD 一樣是支援磁碟區(partition)的重新劃分。在 Linux 中,我們可以透過 gparted
或 parted
來做到重新分配空間。
不過我們需要牢記:就算這個動作本身是安全的,但仍然要備份重要資料!意外可能潛藏在任何一個小步驟中。另外,要注意如果我們是要像我今天所操作一般縮小空間,縮小後的空間必須仍然足夠大到容納所有的資料,否則可能會發生意外。
本篇文章是我透過 gparted
和 parted
工具進行重新劃分的步驟筆記;gparted
可以視為 parted
的圖形化界面版本,封裝了 parted
的功能去管理磁碟區。
在重新分配前,別忘了硬碟一定要記得用 umount
卸載下來,千萬不能處於掛載的狀態。
使用 gparted 重新分配磁碟區
首先,我們可以安裝 gparted
工具。
sudo apt update
sudo apt install gparted
接著,我們啟動 gparted
工具:
sudo gparted
Output:
選擇我們想要重新分配的硬碟,可以看到總共的尺寸、使用的容量和剩餘的空間。
接著我們對著想要重新分配的硬碟點選右鍵,選擇 Resize/Move。以下,我會先拿 /dev/sda 的硬碟作為示範。
如果是要調整當前磁碟區的大小,就把想要調整成的目標尺寸填寫在 New size (MiB) 選項裡,下面的 Free space following (MiB) 會自動補上剩餘的空間。
完成配置後,按下右下角的 Resize/Move 就完成配置了。
最後,檢查下方式否出現 "Shrink /dev/sda1 from 931.51 GiB to 400.00 GiB" 這行敘述,這是我們的操作敘述;接下來按下上面那顆綠色的打勾按鈕,就可以正式執行這個操作。
目前在我的測試中,exFAT 不支援這樣重新分割,但是 ext4 之類的格式則沒有問題。
使用 parted 重新分配磁碟區
當然,如果我們處於沒有圖形化界面的伺服器上,我們當然只能通過命令列工具來處理磁碟區的重新分配。首先使用以下指令開始處理你想要重新分配的硬碟(假設是 /dev/sda,注意是硬碟不是磁碟區):
sudo parted /dev/sda
Output:
GNU Parted 3.4
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
我們可以先用 print
來查看這顆硬碟磁碟區的狀態,這將顯示當前磁碟上的所有分割磁碟區,包括編號、大小、類型等資訊。
(parted) print
Output:
Model: Seagate One Touch w/PW (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1000GB 1000GB ext4
接著我們來正式縮小某個分割磁區吧!在這裡,我的分割磁區只有 Number 1 而已,也就是 /dev/sda1,我們可以使用 resizepart
指令,格式為 resizepart <磁碟區編號> <結束位置>
:
(parted) resizepart 1 400GB
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? yes
(parted) print
Output:
Model: Seagate One Touch w/PW (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 400GB 400GB ext4
順帶一提,如果你希望在這裡順便把新的未分配自由空間切割,可以使用:
(parted) mkpart primary ext4 <START> <END>
primary
是分割區類型(可以是 primary 或 logical)ext4
是文件系統類型(可以是 ext4、ntfs、exfat 等)<START>
是新分割磁碟區的開始位置(如 400GB)<END>
是新分割磁碟區的結束位置(如 900GB)
最後確認了你的處理沒有問題,可以直接退出,所有的操作會被保存。
(parted) quit
Output:
Information: You may need to update /etc/fstab.