Gparted 和 Gdisk 的最佳分区大小

Gparted 和 Gdisk 的最佳分区大小

我正在尝试将 4TB(4,000,225,165,312 字节)驱动器切成 1TB 的偶数分区。

我希望这些分区可以进一步划分为至少 1^3 字节 (~1GB) (1000000000) 的分区。

好吧,经过几个小时的提炼,我发现了几个相互矛盾的结论:

  • 使用 Gparted 我无法创建 1000000000 字节 (953.67431640625 MB) 分区
  • 使用 KDEparted 我可以选择字节 1000000000 字节分区,它最终为 1000341504
    • 结果 954MB 是 1000341504 字节
    • 这不能缩放,因为 1000341504*1000*4 (~4TB) 是 4001366016000,大于驱动器
    • 当我赚到 1,000,000,000,000 时,最终结果是 1,000,000,716,800
    • 因此,随着总大小的增加,额外的开销会减少
    • KDEparted 使用不使用扇区的 sfdisk 后端
    • Gparted 使用 MB 对齐
  • 使用 Gdisk,我可以使用 1953125000 个扇区(每个扇区 512 字节)创建 1000000000000 (1000^4) B (~1TB) 分区

这是可以接受的,必须使用 Gdisk 创建带有扇区的分区,然后使用 Gparted 移动它们。然而,当我删除一个 1000^4 B 分区并使用 Gparted 创建一个新分区以填充可用空间时,它会提供额外的字节 1,000,000,716,800(143 个扇区)。

这可能与 Gdisk 警告“分区将在 2048 扇区边界上对齐”有关,但我认为我正在最大化 Gdisk 的空间。现在看来我必须先使用 Gdisk,然后再使用 Gparted,然后再次使用 Gdisk..?有没有更优化的方法来解决这个问题?

一个重要的部分是了解哪种对齐(字节、柱面、MiB)最好,这篇文章有所帮助:“因此,许多现代分区工具只是沿着 1M[i]B 边界对齐整个驱动器,这巧妙地消除了需要检测您是否拥有多种类型的驱动器,无论是 512 字节扇区、4KB 扇区还是具有任意块大小的 SSD。”https://superuser.com/questions/393914/what-is-partition-alignment-and-why-whould-i-need-it

显然,选择 1 MiB 是因为最近的驱动器使用 4096 字节大小的扇区、SSD 512 删除要求以及 OG 512 扇区大小。让我困惑的是 MiB(1,048,576 字节)比 4096 字节大多少。我还是不明白为什么,但 MiB 似乎是主导阵营。到目前为止正在工作。 “2048 扇区边界”实际上意味着 2048*512= 1MiB,而不仅仅是从 2048 字节开始(“MiB 对齐”会更清楚)。此链接也很有帮助:https://www.rodsbooks.com/gdisk/advice.html

我需要用二进制思考。我不能只乘以 10.. 它不会加起来 ~1TB。那么,当 MiB 比 4K 4096B 扇区大小大得多时,为什么要使用 MiB 对齐呢?这是面向未来的尝试吗?

答案1

不可能以字节分辨率进行分区。即使你可以,它也会给你带来无穷无尽的对齐问题。

扇区大小为 512 或 4096,所有分区大小必须是该大小的倍数。按照惯例,您甚至应该坚持 MiB 对齐(1048576 字节的倍数),除非您有充分的理由不这样做。

另一个复杂之处是分区表本身需要一些空间,因此任何分区都不能从扇区 0 开始。同样,您不能使用驱动器的最后扇区(由 GPT 备份标头使用)。

因此,如果您希望所有分区具有相同的大小,并且不超过字节边界,您将无法帮助近似一些事情。

以下是 4TB 磁盘上 1TB 分区的示例:

(parted) unit b
(parted) print
Model: Loopback device (loopback)
Disk /dev/loop0: 4000225165312B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start           End             Size           File system  Name  Flags
 1      1048576B        999999668223B   999998619648B
 2      1000000716800B  1999999336447B  999998619648B
 3      2000000385024B  2999999004671B  999998619648B
 4      3000000053248B  3999998672895B  999998619648B

(parted) unit mib
(parted) print
Model: Loopback device (loopback)
Disk /dev/loop0: 3814912MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start       End         Size       File system  Name  Flags
 1      1.00MiB     953674MiB   953673MiB
 2      953675MiB   1907348MiB  953673MiB
 3      1907349MiB  2861022MiB  953673MiB
 4      2861023MiB  3814696MiB  953673MiB

这只是一个示例 - 您可以选择其他边界。

如果您需要创建更多分区(您提到了 1GB),您应该自己编写一个脚本来确定这些边界。请注意,GPT 默认情况下有 128 个分区限制。

答案2

它是不是建议分区大小为 1'000'000'000 的倍数 - 该数字不能被 4096 整除,这对于许多 Linux 子系统的正常性能至关重要。如果我是你,我会使用 1024 * 1024 * 1024 代替(1073741824 字节或恰好 1GiB)或接近它的值(但同样可以被至少 1024*1024 整除,因为许多 Linux 磁盘实用程序更喜欢 1MiB 边界)。

答案3

我正在添加一些分区方案。

按 MiB 向下舍入:

999999668224 ~1TB    /2  953674MiB
499999834112 ~500GB  /2  476837
249999917056 ~250GB  /2  238418.5 ->  238418  249999392768
124999958528 ~125GB  /2  119209.25    119209  124999696384
62499979264  ~63GB   /2  59604.625 -> 59604   62499323904
31249989632  ~32GB   /2  29802                31249661952
15624994816  ~16GB   /2  14901.15625  14901   15624830976
7812497408   ~8GB    /2  7450.578125  7450    7811891200
3906248704   ~4GB    /2  3725.28.. -> 3725    3905945600
1953124352   ~2GB    /2  1862.64.. -> 1862    1952448512
976562176    ~1GB        931.32..  -> 931     976224256
1024 * 976224256 = 999653638144

每次调整最多丢失 0.64 MiB,总共 346030080 B (330 MiB) 未使用 (999999668224-999653638144),或总共 1000^4-999653638144 = 346361856/1048576 = 330.31..MiB。这可能是最好的方法。可以接受的损失。

从 931MiB 开始构建:

953334, 479672, 238336, 119168, 59584, 29792, 14896, 7448, 3724, 1862, 931 MiB

999643152384 ~1TB        953334 MiB
502972547072 ~500GB  *2  479672  
249913409536 ~250GB  *2  238336  
124956704768 ~125GB  *2  119168  
62478352384  ~63GB   *2  59584   
31239176192  ~34GB   *2  29792   
15619588096  ~16GB   *2  14896   
7809794048   ~8GB    *2  7448    
3904897024   ~4GB    *2  3724
1952448512   ~2GB    *2  1862
976224256    ~1GB    *2  931

953674-953334 = 340MiB ..也是可接受的损失,没有中间大小调整。

893760  ~960GB
446880  ~480GB
223440  ~240GB
111720  ~120GB
55860   ~60GB
27930   ~30GB
9310    ~10GB
4655    ~5GB
931 MiB ~1GB

这些尺寸与 SSD 和操作系统尺寸配合得很好。 953334-893760 = 59574 MiB 未使用,但足以容纳约 60GB 分区(剩余 3714,加上 20 MiB 为 20971520 B,并且普通 HDD 上有足够的额外字节来容纳约 4GB 分区)(取决于最终 -对齐问题)。

举个例子,我的 4TB 驱动器有 225,165,312 B 额外空间,即 53.68 MiB。在我的 2TB 驱动器上,我能够容纳 2x893760、2x55860、2x3724、1x931(总共 1907619),并留下 256MiB(更改为 109,使用了 88 个,大概是用于 GPT 表)。我从最后到开始都做了这个填充。最后有 0.7MiB (90113 B) 未使用,开始时有 1MiB。但我的分区号是倒退的(我可能可以忍受这一点,尽管它们在 fdisk 中倒置列出)。另一种方法是预先计算它们,可能是通过首先在 MiB 中制作最大的可能分区来读取结束对齐计数。这应该是 1907728-1907619=109MiB,与上面相同。

但是,Gparted 允许的最小大小是 256MiB。 ..啊哈哈,这是因为我将默认类型保留为 btrfs,它需要 256,而 ext4 仅需要 8MiB。所以,这确实有效,耶!

编辑:我意识到通过将 931MiB 调整为 930,可以进行更均匀的细分。

892800  ~960GB
426400  ~480GB
223200  ~240GB
111600  ~120GB
55800   ~60GB
27900   ~30GB
18600   ~20GB
9300    ~10GB
4650    ~5GB
930 MiB ~1GB
465

然后我意识到,通过将 465 变成 464,它可以进一步划分,一直到“7MiB”。

890880  ~960GB
445440  ~480GB
223720  ~240GB
111360  ~120GB
55680   ~60GB
27840   ~30GB
9280    ~10GB
4640    ~5GB
928 MiB ~1GB
464
232
116
58
26
14
7 MiB

我不确定我更喜欢以上两个中的哪一个。或者进一步舍入到 900 也会产生一些更可读的块。

864000  ~960GB
432000  ~480GB
216000  ~240GB
108000  ~120GB
54000   ~60GB
27000   ~30GB
18000   ~20GB
9000    ~10GB
4500    ~5GB
900 MiB ~1GB
450
275

这仅损失了 3.2% 的空间 (30/931),并提供了更容易记住和可读的尺寸。

或者,我可以一直舍入到 800,000 MiB,但这将导致 11% 的损失 (833.3/931),并且 ~1GB 块将不均匀,为 833.33 MiB。可以在 25000 处进行类似十进制的 5 除法,使 ~5GB 大小为 5000 MiB,但这可能会令人困惑,因为 5000 MiB 不适合 5GB USB 驱动器。不过,对于 1GB 之类的小型驱动器,我可以使用“930”或“900”方案。实际上,950 MiB 应该适合,因为 1GB 是 953.67 MiB。这留下 3.67 MiB 用于结束对齐和 2048 个扇区的开始 GPT 分区表(即 1 MiB)。

800000  ~960GB
400000  ~480GB
200000  ~240GB
100000  ~120GB
50000   ~60GB or 64GB drive
25000   ~30GB or 32GB drive
15000   ~15GB part or 16GB drive
5000    ~5GB  part or 8GB  drive
smaller drives (and backups as partitions):
950 MiB ~1GB    (4750 ~5GB)
425

或者,如果我将中等尺寸保持均匀,它们将适合大多数驱动器,直到 120GB SSD。即使是较小的 1GB 分区通常也可以缩小 50 MiB 以适合 U 盘,因此我可以将它们保留在 HDD 上 1000 MiB。

800000  ~960GB
400000  ~480GB
200000  ~240GB
100000  ~120GB
60000   ~60GB or 64GB drive
30000   ~30GB or 32GB drive
15000   ~15GB part or 16GB drive
5000    ~5GB  part or 8GB  drive
1000    ~1GB  part or 1GB  drive
smaller drives (and backups as partitions):
950 MiB ~1GB    (4750 ~5GB)
425

相关内容