如何在不使用 gparted 的情況下調整 Windows 分區的大小?
假設我在筆記型電腦上安裝了本機(即來自製造商)Windows 7(帶有 SSD 設備、BIOS/MBR 分區表,如果這很重要)。設備上的分區完全分配並專用於 windows。
我現在想在 windows 旁邊安裝一個 linux 系統,為此我需要先縮小 windows 分區。雖然我可以在 Windows 中或使用 gparted 找到方法來執行此操作,但如何僅使用命令行程序(如 parted 或 fdisk)來執行此操作?
GParted 通常值得使用,因為它有助於避免一些令人討厭的錯誤。我想這裡命令行工具的主要優點是對細節有更多的了解。這在意外脆弱的情況下很有用(至少一旦它被破壞,細節可能會幫助您了解原因)。但是,我不建議其他人使用它們,除非他們希望能夠從錯誤中吸取教訓,直到“我的磁碟現在全是零,我需要從頭開始”。
此外,桌面 Linux 安裝過程應該提供一個使用者友好的工具來調整 Windows 分區的大小。(或官方文件)。這是常見的情況。一般來說,這將是我的第一個建議。
所有這些選項都建議在出現任何錯誤時進行備份。
令人困惑的是,您不應該使用
parted
命令行工具。它曾經是一個方便的選擇,但開發人員不再支持使用它調整文件系統的大小。否則,您使用
ntfsresize
,然後刪除並重新創建分區 (fdisk
),除大小外,使用相同的詳細資訊。當心單位 - 一些工具使用 MB;其他人可能會說 MB,但意思是 MiB。fdisk
使用 MiB 並ntfsresize
使用 MB。懶惰的方法是將 ntfsresize 比您需要的小得多(例如 2x),然後在重新創建分區後,您第二次執行 ntfsresize 而沒有明確的大小。對於困難的方法,要轉換單位,您可以在 bash 中執行數字表達式。例如,以字節為單位查看 10GiB
echo $((10 * 1024 * 1024 * 1024))
:. 您可以將這些表達式用作命令行工具(如ntfsresize
.ntfsresize 的分區名稱將如下所示
/dev/sda1
。lsblk -f
將列出所有分區(包括您的啟動盤)及其大小,並告訴您有關文件系統的資訊。fdisk
將需要磁碟的名稱,例如/dev/sda
.對於 MBR,要重新創建的分區詳細資訊是:分區類型和“活動”/可引導標誌,以及起始偏移量。
$$ 1 $$
fdisk
預設情況下應顯示扇區中的分區偏移量。(如果沒有,可能會有部分未顯示 - 可能在末尾用 + 表示,但那裡可能存在陷阱 - 您應該確保始終fdisk
在扇區模式下使用)。 為了避免在裡面輸入錯誤fdisk
,我有時會選擇數字並用滑鼠中鍵粘貼它們。這需要 X Windows,或者在文本模式下你需要gpm。我認為現在預設在控制台上提供 gpm 不太常見,但是當我使用 Clonezilla Live 時它就在那裡。這很方便,但您可能會先失去號碼。因此,您可能應該在刪除之前將原始分區偏移量寫下來。$$ 1 $$ GPT 對類型使用不同的格式,添加了更多標誌和分區 UUID。我認為它們通常不重要。flags 不適用於主 Windows 分區,並且分區 UUID 還沒有被太多使用。
這裡有一個使用命令行調整 NTFS 分區大小的備忘錄
ntfsresize
(來自ntfs-3g / ntfsprogs
軟體包)和fdisk
,它應該適用於 Windows XP-to-8 版本。請注意,如果安裝了 ntfs-3g/ntfsprogs,GParted 會為 MBR/DOS 以及 EFI/GPT 驅動器執行以下所有操作。我的參考文獻在最後。好的,在這種情況下,我有一個 MBR 分區的 149 GB 磁碟,帶有一個 NTFS 分區 (Windows C:)。我會將其調整為 20 GB(正如@sourcejedi 所說的那樣:小心單位),以便為新分區騰出空間,例如。數據和/或其他作業系統。
先決條件
- 清潔 NTFS文件系統:基於 linux 的 NTFS 工具將拒絕接觸 NTFS 文件系統,除非它已經完全一致,以最大限度地減少數據失去的機會。如果沒有,則必須使用
ntfsfix
(來自 Linux)或chkdsk /f
(來自 Windows)。- 備份重要數據(例如,使用 ntfsclone 就像上面@peterph 寫的那樣)
- 知道我要調整哪個設備和分區,在這種情況下是 /dev/sdb1。
A. 收縮文件系統
- 檢查設備以確保它已準備好調整大小:
~ ntfsresize --check /dev/sdb
在進一步處理之前,應解決此時的任何警告。 2. 檢查這個文件系統可以調整到的大小:
~ ntfsresize --info /dev/sdb > ... > You might resize at 16865632256 bytes or 16866 MB (freeing 112060 MB). > ...
- 測試縮小到 18 GB 的效果(我們將在一分鐘內達到 20 GiB):
~ ntfsresize --no-action --size 18G /dev/sdb1 > ... > The read-only test run ended successfully.
- 調整為 18 GB:
~ ntfsresize -v --size 18G /dev/sdb1 > ... > Successfully resized NTFS on device '/dev/sdb1'. > You can go on to shrink the device for example with Linux fdisk. > IMPORTANT: When recreating the partition, make sure that you > 1) create it at the same disk sector (use sector as the unit!) > 2) create it with the same partition type (usually 7, HPFS/NTFS) > 3) do not make it smaller than the new NTFS filesystem size > 4) set the bootable flag for the partition if it existed before > Otherwise you won't be able to access NTFS or can't boot from the disk! > ...
提示:如果磁碟存在已知問題,如壞扇區,請添加“
--bad-sectors
”選項。B. 調整分區大小
在上一步中,我們縮小了文件系統,而不是我們可以檢查的分區:
~ disktype /dev/sdb > Block device, size 149.1 GiB (160041885696 bytes) > DOS/MBR partition map > Partition 1: 149.1 GiB (138602266624 bytes, 8459611 clusters of 16 KiB, bootable) > Volume size 18.37 GiB (20799750144 bytes, 1269516 clusters of 16 KiB)
如您所見,卷大小和分區值不同,分區 1 仍填充驅動器。在這個階段,有必要刪除分區並創建一個較小的分區以匹配 NTFS 文件系統的新大小。由於我的磁碟有一個 DOS/MBR 分區表,我將使用
fdisk
(@peterph 上面有 GPT 的答案):~ fdisk /dev/sdb
- 刪除分區
鍵入“p”以顯示該磁碟上的分區,並註意哪個包含調整大小的文件系統。
鍵入“d”將詢問您要刪除哪個分區
> Command (m for help): d > partition number (1-3, last one by default) : 1
- 重新創建分區
現在重新創建更小的分區,使其保持主分區和第一個分區:
> Command (m for help): n > Command action > e extended > p primary partition (1-4) p > Partition number (1-4): 1 > First cylinder (1-31, default 1): 1
由於我將文件系統縮小到 18GB,讓我們將分區設為 20GiB:
> Last cylinder or +size or +sizeM or +sizeK (1-31, default 31): +20G
我們知道文件系統是 NTFS,所以對類型使用命令操作“t”,對 NTFS 使用列出的十六進制程式碼“7”:
> Command (m for help): t > Selected partition 1 > Hex code (type L to list codes): 7 > Changed system type of partition 1 to 7 (HPFS/NTFS)
- 接下來我要確保該分區仍被標記為可引導:
> Command (m for help): p Device Boot Start End Blocks Id System /dev/sdb1 63 40644449 40644387 7 HPFS/NTFS
通過添加引導標誌使新分區可引導:
> Command (m for help): a > Partition number (1-4): 1
- 將更改的分區表寫入磁碟並使用命令操作“w”退出 fdisk :
> Command (m for help): w
- 現在是文件系統的最終調整大小
沒有“大小”開關的 ntfsresize 將確保它使用整個分區的可用空間(全部而不是更多 - 感謝@sourcejedi)
~ ntfsresize -v /dev/sdb1
現在我們可以檢查驅動器上的分區和文件系統是否成對:
~ disktype /dev/sdb > ... > Partition 1: 20.0 GiB (21474836480 bytes, 40644387 sectors from 63, bootable) > Type 0x07 (HPFS/NTFS) > Windows NTLDR boot loader > NTFS file system > Volume size 19.98 GiB (21453361644 bytes, 1269516 clusters of 16 KiB)
參考