%E3%81%A8%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88(2).png)
パーティションをプログラム的にアンマウントし(ビジー状態でない場合)、すべての作業が完了したら再度マウントするソフトウェアがあります。
これをターミナルで実行すると:
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
このために という名前のライブラリに依存しています。libmount一部は、長い Linux 固有のテーブルからのテーブル駆動です。