プログラムでパーティションをアンマウントし(使用していない場合)、すべての操作が完了した後に再マウントできるソフトウェアがあります。
端末で実行している場合:
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固有のテーブルから来るテーブル中心です。
追加読書
- 」
mtab
書類」。GNU Cライブラリリファレンスマニュアル。 2.23。フリーソフトウェア財団。 2016. - カレルジュッカー(2012)。 」インストールオプション」。libmountリファレンスマニュアル。 2.21。 Linuxカーネルのアーカイブ。