Command-Line

如何在不使用 gparted 的情況下調整 Windows 分區的大小?

  • November 21, 2016

假設我在筆記型電腦上安裝了本機(即來自製造商)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/sda1lsblk -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. 收縮文件系統

  1. 檢查設備以確保它已準備好調整大小:
~ ntfsresize --check /dev/sdb

在進一步處理之前,應解決此時的任何警告。 2. 檢查這個文件系統可以調整到的大小:

~ ntfsresize --info /dev/sdb
> ...
> You might resize at 16865632256 bytes or 16866 MB (freeing 112060  MB).
> ...
  1. 測試縮小到 18 GB 的效果(我們將在一分鐘內達到 20 GiB):
~ ntfsresize --no-action --size 18G /dev/sdb1
> ...
> The read-only test run ended successfully.
  1. 調整為 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
  1. 刪除分區

鍵入“p”以顯示該磁碟上的分區,並註意哪個包含調整大小的文件系統。

鍵入“d”將詢問您要刪除哪個分區

> Command (m for help): d
> partition number (1-3, last one by default) : 1
  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)
  1. 接下來我要確保該分區仍被標記為可引導
> 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
  1. 將更改的分區表寫入磁碟並使用命令操作“w”退出 fdisk
> Command (m for help): w
  1. 現在是文件系統的最終調整大小

沒有“大小”開關的 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)

參考

引用自:https://unix.stackexchange.com/questions/179577