gpt4 book ai didi

C:如何使用 mount(2) 挂载用 mkfs 创建的常规文件系统?

转载 作者:行者123 更新时间:2023-12-02 03:20:32 27 4
gpt4 key购买 nike

这就是我制作“常规”文件系统的方式:

$ touch container
$ mkfs.ext4 container 20000

如何使用 C 函数挂载它 mount(2) ?

实际上 mount 告诉我:

Block device required



有没有办法在 C 中创建文件系统?

最佳答案

问题在于mount库调用不设置循环设备。为了安装你的容器,你需要通过 -o loopmount命令,其中有效地包含了 losetup确实(即使 /dev/loopN 指向您的文件并挂载该文件)。使用库调用时,需要模拟,即需要先设置循环设备。

要准确确定您想要做什么,请尝试:

strace mount -t ext4 -o loop container /mnt

并查看系统调用。您可以看到发生的事情是首先它创建一个循环设备(例如 /dev/loop0 使用等效于 losetup 的系统调用),然后它安装该循环设备。

以下是 strace 中的关键行输出:

首先分配loop设备:
stat("/dev/loop", 0x7fffe90b00b0)       = -1 ENOENT (No such file or directory)
open("/dev/loop0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 0), ...}) = 0
ioctl(3, LOOP_GET_STATUS, {number=39736224, offset=0x6f726763, encrypt_type=0x732f7075 /* LO_CRYPT_??? */, encrypt_key_size=1702130553, flags=LO_FLAGS_READ_ONLY|LO_FLAGS_AUTOCLEAR|LO_FLAGS_PARTSCAN|0x63206460, name="group rw,noexec,nosuid,nodev,none,name=systemd 0 0", encrypt_key="s 0 0\0\0e-agent.devices 0 0\0\0\320\177\0\0", ...}) = -1 ENXIO (No such device or address)
close(3) = 0
open("/home/amb/so/container", O_RDWR) = 3
open("/dev/loop0", O_RDWR) = 4
readlink("/home", 0x7fffe90adfa0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/amb", 0x7fffe90adfa0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/amb/so", 0x7fffe90adfa0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/amb/so/container", 0x7fffe90adfa0, 4096) = -1 EINVAL (Invalid argument)
ioctl(4, LOOP_SET_FD, 0x3) = 0
close(3) = 0
ioctl(4, LOOP_SET_STATUS64, {offset=0, number=0, flags=LO_FLAGS_AUTOCLEAR, file_name="/home/amb/so/container", ...}) = 0
ioctl(4, LOOP_GET_STATUS64, {offset=0, number=0, flags=LO_FLAGS_AUTOCLEAR, file_name="/home/amb/so/container", ...}) = 0

然后才做 mount :
mount("/dev/loop0", "/mnt", "ext4", MS_MGC_VAL, NULL) = 0

但是,我建议您支付给 mount除非你有充分的理由不这样做。这确保了 /etc/mtab等进行维护。

关于C:如何使用 mount(2) 挂载用 mkfs 创建的常规文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33835124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com