我有一个软件可以以编程方式卸载分区(如果不忙)并在所有工作完成后再次安装它。
如果我在终端中运行:
sudo mount /dev/sdb1 /mnt/fat32 -o sync,dirsync,rw,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro -t vfat
我得到这个/proc/self/mountinfo
:
100 24 8:17 / /mnt/fat32 rw,relatime shared:61 - vfat /dev/sdb1 rw,sync,dirsync,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro
所以我制作了一个mountinfo 解析器并获取数据来恢复安装,但我正在使用 和 转换安装选项 ( ) 和超级选项 ( : ...rw,relatime
中的最后一部分) :/mountinfo
rw,sync,dirsync,
mountoptions
data
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
我的方法是将安装选项转换为适当的选项mountflags
,并直接向 提供特殊选项data
,但随后出现此错误:
[62857.390803] FAT-fs (sdb1): Unrecognized mount option "rw" or missing value
因此,我创建了一个函数来复制超级选项中的属性,它们恰好与文件系统特定数据相匹配,现在它可以工作了。但我仍然有一个问题:例如,如果它们不在安装选项标志中并且它们不是 vfat 特定属性,我该如何sync
设置dirsync
?
如果可以通过命令行挂载来制作,那么也可以在命令行版本中制作,对吗?
答案1
答案2
所以我做了一个
mountinfo
解析器[…]
您最好使用GNU C 运行时库中提供的setmntent()
和。getmntent()
我的方法是将安装选项转换为适当的选项
mountflags
,并直接提供特殊选项data
[…]
您需要做的是将给mnt_opts
定的getmntent()
和 处理为flags
和data
。包mount
中的命令依赖util-linux
于一个库,名为库挂载。其中一些是表驱动的,来自冗长的 Linux 特定表。