glS*_*glS 9 command-line dual-boot partition ntfs ntfs-3g
假设我在笔记本电脑上安装了本机(即来自制造商)Windows 7(带有 SSD 设备、BIOS/MBR 分区表,如果这很重要)。设备上的分区已完全分配并专用于 Windows。
我现在想在 windows 旁边安装一个 linux 系统,为此我需要先缩小 windows 分区。虽然我可以从 Windows 中或使用 gparted 找到方法来做到这一点,但如何仅使用命令行程序(如 parted 或 fdisk)来做到这一点?
tuk*_*k0z 15
这里有一个备忘录,可以使用命令行ntfsresize
(来自ntfs-3g / ntfsprogs
包)和来调整 NTFS 分区的大小fdisk
,这应该适用于 Windows XP 到 8 版本。请注意,如果安装了 ntfs-3g/ntfsprogs,GParted 会为 MBR/DOS 以及 EFI/GPT 驱动器执行以下所有操作。我的参考在最后。
在这种情况下,我有一个 MBR 分区的 149 GB 磁盘和一个 NTFS 分区(Windows C:)。我会将其调整为 20 GB(正如@sourcejedi 所说的那样:BEWARE UNITS)以便为新分区腾出空间,例如。数据和/或其他操作系统。
ntfsfix
(来自 Linux)或chkdsk /f
(来自 Windows)。检查设备以确保它已准备好调整大小:
~ ntfsresize --check /dev/sdb
Run Code Online (Sandbox Code Playgroud)
在进一步处理之前,应解决此时的任何警告。
检查这个文件系统可以调整到的大小:
~ ntfsresize --info /dev/sdb
> ...
> You might resize at 16865632256 bytes or 16866 MB (freeing 112060 MB).
> ...
Run Code Online (Sandbox Code Playgroud)测试缩小到 18 GB 的效果(我们将在一分钟内缩小到 20 GiB):
~ ntfsresize --no-action --size 18G /dev/sdb1
> ...
> The read-only test run ended successfully.
Run Code Online (Sandbox Code Playgroud)调整到 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!
> ...
Run Code Online (Sandbox Code Playgroud)提示:如果磁盘存在坏道等已知问题,请添加“ --bad-sectors
”选项。
在上一步中,我们缩小了文件系统,而不是我们可以检查的分区:
~ 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)
Run Code Online (Sandbox Code Playgroud)
如您所见,卷大小和分区值不同,分区 1 仍在填充驱动器。在这个阶段,有必要删除分区并创建一个较小的分区以匹配 NTFS 文件系统的新大小。由于我的磁盘有一个 DOS/MBR 分区表,我会这样做fdisk
(@peterph 有一个 GPT 的答案):
~ fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)
删除分区
键入“p”以显示该磁盘上的分区,并注意哪个包含调整大小的文件系统。
输入“d”会询问您要删除哪个分区
> Command (m for help): d
> partition number (1-3, last one by default) : 1
Run Code Online (Sandbox Code Playgroud)重新创建分区
现在重新创建较小的分区,使其保持主要和第一顺序:
> 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
Run Code Online (Sandbox Code Playgroud)
由于我将文件系统缩小到 18GB,让我们将分区设为 20GiB:
> Last cylinder or +size or +sizeM or +sizeK (1-31, default 31): +20G
Run Code Online (Sandbox Code Playgroud)
我们知道文件系统是 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)
Run Code Online (Sandbox Code Playgroud)接下来,我想确保分区仍标记为可引导:
> Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 63 40644449 40644387 7 HPFS/NTFS
Run Code Online (Sandbox Code Playgroud)
通过添加引导标志使新分区可引导:
> Command (m for help): a
> Partition number (1-4): 1
Run Code Online (Sandbox Code Playgroud)写在改变分区表与“W”命令操作磁盘并退出fdisk:
> Command (m for help): w
Run Code Online (Sandbox Code Playgroud)现在最终调整文件系统的大小
没有“大小”开关的 ntfsresize 将确保它使用整个分区的可用空间(整个分区而不是更多 - 谢谢@sourcejedi)
~ ntfsresize -v /dev/sdb1
Run Code Online (Sandbox Code Playgroud)现在我们可以检查驱动器上的分区和文件系统是否成对:
~ 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)
Run Code Online (Sandbox Code Playgroud)
参考
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 还没有被很多人使用。