【问题标题】:Linux Mount using Remount to allow read-writeLinux Mount 使用 Remount 以允许读写
【发布时间】:2020-06-24 14:34:16
【问题描述】:

我想使用 root 帐户重新挂载只读文件系统,使其变为可读写。

查看 Linux 手册页面,我注意到没有像 MS_RDWRITE 这样的标志,所以我的问题是,有没有人知道在线示例,该示例演示了使用 mount 和 remount 标志设置只读路径以允许读取和写入?

这将在 C++ 中为运行嵌入式 Linux 的设备完成。

/* Here's the declared function for Mount a filesystem.  */
extern int mount (__const char *__special_file, __const char *__dir,
      __const char *__fstype, unsigned long int __rwflag,
      __const void *__data) __THROW;

【问题讨论】:

  • 重新安装将涉及卸载 (umount()) 和安装 (mount())。省略“只读”标志以读写模式挂载文件系统。
  • 好吧,我真的更喜欢使用 MS_REMOUNT 参数调用 mount,例如:mount(NULL, "path_here", NULL, MS_REMOUNT, NULL);,但我不确定是什么最后一个参数应该是在指定 MS_REMOUNT 时。
  • "数据的含义取决于文件系统类型,完全由内核中的文件系统驱动控制。" ref:gnu.org/software/libc/manual/html_node/…
  • 当我上次查看 mount(2) 的手册页时(第 7 版 Unix——我已经很久没有担心它了),它有 3 个参数。它没有被 POSIX 标准化。 BSD 版本有 4 个参数(卸载操作是unmount(),而不是umount())。 SVR4 mount(2) 有一些可选参数——类似于 Linux 版本中的参数,但不同(标志是第 3 个)。标志的常量名称甚至没有一致的前缀(MS_ vs MNT_)。它很快就变得非常系统特定。唯一确定的方法是找到正确的系统特定文档。 [...继续...]
  • […continuation…] 如果您正在处理特定制造商的设备,您必须知道他们的设备驱动程序期望什么。幸运的是,data 参数的空指针最多会告诉您是否需要找到一个非空值来传递(可能是errno == EINVAL)。在您知道自己想要什么之前,任何其他价值都是有风险的。

标签: c++ linux


【解决方案1】:

我无法让原生 API 正常工作。根据制造商,他们建议在终端窗口中使用 remount 命令。这对我来说是正确的。

当使用 root 权限调用时,这会将整个根文件夹重新挂载为可读写。

        // Remount the root folder.         
        char* cmd = "mount -nwo remount,rw /";
        if (-1 == system(cmd))
        {
            // handle the error.
        }   

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多