取付ベース(8) 取付ベース付(2)

取付ベース(8) 取付ベース付(2)

プログラムでパーティションをアンマウントし(使用していない場合)、すべての操作が完了した後に再マウントできるソフトウェアがあります。

端末で実行している場合:

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:...の最後の部分)を使用して変換しています。/mountinforw,sync,dirsync,mountoptionsdata

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

いくつかのパラメータが提供されていますmount(8)mountflagsパラメータで指定されたフラグに変換されます。mount(2):

  • syncはいMS_SYNCHRONOUS
  • dirsyncはいMS_DIRSYNC
  • relatimeはいMS_RELATIME
  • rwデフォルトなので指定できroませんMS_RDONLY

答え2

mountinfoだからパーサーを作りました。[… ]

GNU Cランタイムライブラリで提供されているものを使用することをお勧めしますsetmntent()getmntent()

私のアプローチは、インストールオプションを適切なオプションに変換しmountflags、特別なオプションを直接提供することでした。data[… ]

あなたがすべきことは、mnt_opts与えられた合計を合計getmntent()として扱うことです。パッケージのコマンドは、次のライブラリによって異なります。flagsdatamountutil-linuxライブラリマウント。これらのいくつかは、長いLinux固有のテーブルから来るテーブル中心です。

追加読書

  • mtab書類」。GNU Cライブラリリファレンスマニュアル。 2.23。フリーソフトウェア財団。 2016.
  • カレルジュッカー(2012)。 」インストールオプション」。libmountリファレンスマニュアル。 2.21。 Linuxカーネルのアーカイブ。

関連情報