/proc/partitionsと/sys/dev/block/の値の単位は何ですか?/サイズ?

/proc/partitionsと/sys/dev/block/の値の単位は何ですか?/サイズ?

Androidデバイスのサンプルemmcブロック情報があります。

~から/proc/partitions

major minor  #blocks  name
 179    1    5120    mmcblk0p1

/proc/partitions私の小さな知恵として、パーティション1に5120個のブロックがあることが示されているので、ブロックを使用すると仮定します。

~から/sys/dev/block/179:0/mmcblk0p1/size

10240

/sys/… /size のパーティション値は、/proc/partitions 値の 2 倍のようです。それでは、なぜ互いに違い、単位は何ですか?

ベストアンサー1

/proc/partitions1024バイトブロックのサイズを表示します。

/sys/dev/block/*/*/size512バイトセクタのサイズを表示します。

どちらもデバイスの論理/物理ブロック/セクタサイズとは無関係です。


まずproc(5)マンページを見ることができます。

/proc/partitions

各パーティションのメイン番号とマイナー番号、1024バイトのブロック数、パーティション名が含まれています。

2番目は録音する必要があります。どこかにただし、Linuxソースコードを直接表示することもできますblock/partition-generic.c

ssize_t part_size_show(struct device *dev,
                       struct device_attribute *attr, char *buf)
{
        struct hd_struct *p = dev_to_part(dev);
        return sprintf(buf, "%llu\n",(unsigned long long)part_nr_sects_read(p));
...
static DEVICE_ATTR(size, 0444, part_size_show, NULL);

/proc/partitionsそして、情報を生成するコードにどのように関連するかblock/genhd.c

static int show_partition(struct seq_file *seqf, void *v)
{
        ...
        while ((part = disk_part_iter_next(&piter)))
                seq_printf(seqf, "%4d  %7d %10llu %s\n",
                           MAJOR(part_devt(part)), MINOR(part_devt(part)),
                           (unsigned long long)part_nr_sects_read(part) >> 1,
                           disk_name(sgp, part->partno, buf));
        disk_part_iter_exit(&piter);
...
static const struct seq_operations partitions_op = {
        ...
        .show   = show_partition

両方とも2で除算することを使用しますpart_nr_sects_read()(使用)。/proc/partitions>> 1

part_nr_sects_read()デバイスのセクタ/ブロックサイズに関係なく、常に512バイトのセクタにある検索nr_sectsフィールド。たとえば、バイトサイズを512で割る関数(同じフィールド設定)を使用するstruct hd_struct方法を見ることができます。drivers/block/nbd.cset_capacity()nr_sects>> 9

static void nbd_size_update(struct nbd_device *nbd)
{
        ...
        set_capacity(nbd->disk, config->bytesize >> 9);

おすすめ記事