我正在尝试继续了解自己分区上的交换。与上的情况相同较旧的问题
我想知道如何计算 fdisk 命令的正确数字,以准备精确的 2 GB 交换区域。我输入了正确的参数,但我不知道如何计算它。
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-536870911, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-536870911, default 536870911): 4196366
Partition 1 of type Linux and of size 2 GiB is set
现在参数 4196366 的交换大小正好是 2 GB
>>free | grep -i swap | awk '{print "scale=2; "$2" / 1024 / 1024" }' | bc -l
2.00
问题是如何计算 4196366。我是这样想的:
4196366 = 2 * 2 * 1024^2 + 2 * 1024 + 14
因此 2*1024 可能跳过第一个扇区 但为什么我需要将 2GB 再次乘以 2,魔术常数 14 是什么?我通常如何计算应作为参数传递给 fdisk 的内容?
答案1
我不知道为什么这个答案被删除所以我将它粘贴回去:
输入以扇区为单位,大多数磁盘使用 512 字节或 4096 字节逻辑扇区。(512 是传统大小,许多 4K 磁盘仍模拟此大小。)Fdisk 将在启动时告诉您磁盘的逻辑扇区大小。
换句话说,您需要乘以 2,因为一个扇区是 512 字节,正好是半千字节。
因此,如果您想要 2 GB 的交换空间,加上 X KB 的交换头,最简单的方法是先将两者都转换为字节,然后将总和除以扇区大小(512 或 4096)以获得扇区数:
swap_bytes = 2 * 1024 * 1024 * 1024
hdr_bytes = X * 1024
sector_size = 512
part_sectors = (swap_bytes + hdr_bytes) / sector_size
(围捕。)
有用的工具:
$ echo 2G | numfmt --from=si
2000000000
$ echo 2G | numfmt --from=iec
2147483648