安裝座(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)和超級選項(最後一部分/mountinfo:... rw,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):

  • syncMS_SYNCHRONOUS;
  • dirsyncMS_DIRSYNC;
  • relatimeMS_RELATIME;
  • rw是預設的,所以不能指定;ro將會MS_RDONLY

答案2

所以我做了一個mountinfo解析器[…]

您最好使用GNU C 運行時庫中提供的setmntent()和。getmntent()

我的方法是將安裝選項轉換為適當的選項mountflags,並直接提供特殊選項data[…]

您需要做的是將給mnt_opts定的getmntent()和 處理為flagsdata。套件mount中的命令依賴util-linux一個庫,名為庫掛載。其中一些是表驅動的,來自冗長的 Linux 特定表。

進一步閱讀

  • mtab文件」。GNU C 庫參考手冊。 2.23。自由軟體基金會。 2016年。
  • 卡雷爾·扎克 (2012)。 」安裝選項」。libmount 參考手冊。 2.21。 Linux 核心檔案。

相關內容