我正在尝试将 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