blockdev getsize64 的实现

最近在整 initrd 的时候,发现 initrd 中缺少 blockdev 命令,我们的 initrd 中需要用这个命令来获取磁盘的大小,fdisk 命令倒是有,但是不支持 fdisk -s。

既然这样我就直接把 blockdev 中 getsize64 的代码抠出来,单独编写个程序来搞。同时为了不添加其它的动态库,使用静态链接来编译程序。

源码如下:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/stat.h>

#ifndef BLKGETSIZE64
#define BLKGETSIZE64 _IOR(0x12,114,size_t)
#endif

int main(int argc, char *argv[])
{
    int fd;
    unsigned long long size = -1;
    struct stat stat;

    if (argc < 3) {
        printf("invalid argument\n");
        return -1;
    }

    if ((fd = open(argv[2], O_RDONLY)) < 0) {
              printf("open %s failed\n", argv[2]);
              return -1;
    }

    if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
        close(fd);
        printf("ioctl failed\n");
        return -1;
    }

    close(fd);
    printf("%llu\n", size);

    return 0;
}

代码逻辑非常简单,首先打开设备文件,然后执行 ioctl,然后输出信息即可。

编译后执行,其参数与 blockdev 一样,其实 --getsize64 参数根本没有任何作用,只是为了不修改 initrd 中的代码这样搞得。

执行信息摘录如下:

root@longyu:/home/longyu# ./blockdev --getsize64 /dev/vda
21474836480

系统中的 blockdev 程序执行得到的信息摘录如下:

root@longyu:/home/longyu# blockdev --getsize64 /dev/vda
21474836480

可以看到获取到的磁盘大小一致,测试通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `blockdev --getbsz`是一个 Linux 命令,用于获取块设备的块大小(单位为字节)。如果你要获取的是挂载在系统上的文件系统的块大小,可以先使用 `df -T` 命令获取文件系统挂载点的路径,然后再使用 `blockdev --getbsz /dev/path-to-device` 命令获取对应的块大小,其中 `/dev/path-to-device` 是文件系统对应的块设备路径。例如,要获取 `/dev/sda1` 分区的块大小,可以使用以下命令: ``` blockdev --getbsz /dev/sda1 ``` 注意,这个命令只能用于块设备,不能用于普通的文件。 ### 回答2: blockdev --getbsz命令是用于查看指定块设备的块大小。块大小是指操作系统在访问磁盘设备时以固定尺寸进行读写操作的单元大小。 在Linux系统中,块大小一般是512字节或4KB。使用blockdev --getbsz命令,可以获取当前系统中指定块设备的块大小。 例如,运行命令blockdev --getbsz /dev/sda,可以得到块设备/dev/sda的块大小。如果返回值是512,则表示该块设备的块大小是512字节;如果返回值是4096,则表示该块设备的块大小是4KB。 了解块设备的块大小对于磁盘 I/O 的性能优化是很重要的。较大的块大小可以减少磁盘 I/O 次数,提高读写效率;而较小的块大小可以提供更精细的数据控制,适用于某些特定的应用场景。 总之,通过blockdev --getbsz命令,可以方便地获取指定块设备的块大小信息,从而更好地了解和配置磁盘 I/O 操作。 ### 回答3: blockdev --getbsz 是一个用于查看块设备的块大小的命令。块大小是指在计算机存储中,将数据分成固定大小的块进行读写操作的单位。 使用 blockdev --getbsz 命令,可以获取当前块设备的块大小。块大小通常以字节(byte)为单位进行表示。块设备可以是硬盘、固态硬盘(SSD)、USB 驱动器等存储设备。块大小的选择会影响文件系统的性能和存储空间的利用效率。 一般来说,块大小越小,对于小文件的存储能力更高,但是会增加磁盘存储空间的消耗。而块大小越大,对于大文件的存储能力更高,但是对于小文件的存储空间利用相对较低。 通过 blockdev --getbsz 命令,我们可以轻松获取块设备的块大小,并根据实际需求进行优化。一般情况下,操作系统默认的块大小已经针对大部分应用进行了优化,因此在绝大多数情况下,不需要过多地调整块大小。但是对于特定的应用场景,如大规模数据分析或者高性能计算,可能需要调整块大小来优化存储性能。 总的来说,blockdev --getbsz 是一个简单但重要的命令,可以帮助我们了解块设备的块大小,并在需要的时候进行调整以最大限度地发挥设备的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值