sfdisk 分区大小映射的工作原理

sfdisk 分区大小映射的工作原理

我们使用 Python 脚本运行 sfdisk 在 Linux 上创建分区。代码如下:

        stdin,stdout=\
        (lambda x:(x.stdin,x.stdout))\
        (subprocess.Popen(
            ["/sbin/sfdisk","-uM","--no-reread",device],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT))

#<start>;<size>;<id>;<bootable>;
    t="""0;95;83;
;160;b;*
;;E;
;0;;
;20;b;
;95;b;
;;b;
"""
    print "Writing\n%s"%(t,)
    stdin.write(t)
    stdin.close()

"""Explanation:
/ 100MB (hda1)
/mnt/system 175MB (hda2)
/mnt/configuration 25MB (hda5)
/mnt/logs 100MB (hda6)
/mnt/user 88MB (hda7)
"""

运行此命令后,我发现解释是正确的,例如 systm 有 175 MB。我不明白的是大小95如何映射到100兆字节,160到175,20到25等等。

另一个问题是,如果我想将系统大小增加到 210 MB,那么在命令中写入的正确数字是多少?

答案1

请注意,您有一个稍微过时的sfdisk命令,因为自 2015 年版本 2.26 以来,它不再接受-uM用于设置默认“单位”的 。

您看到的差异是由于数字是以 MB 即兆字节 (1000*1000) 或 MiB 即兆字节 (1024*1024) 为单位给出的。 100MB 大约为 95MiB。

如果您想在未来证明您的代码不受更新版本的影响,sfdisk您应该删除-uM并假设大小为 512 字节的扇区。较新的版本允许您给出带有后缀的数字,例如MiB.

210MB可计算如下:

echo '210*1000*1000/1024/1024' | bc

大约 200MiB。

相关内容