由于我使用双启动(Windows 10 / CentOS 7),我希望在两个操作系统之间共享一些文件,例如音乐、照片等。所以我认为自动挂载我的 Windows 数据会很好- 启动期间分区。然而,这并不总是可行,因为我需要休眠 Windows,在 Linux 中重新启动以执行某些操作,然后再次返回 Windows。
那么,如何在启动过程中自动挂载该分区,但条件是:“如果检测到它是“不干净”的,则将其挂载为只读”?
答案1
创建一个 FUSE 帮助程序来/usr/bin
尝试rw
安装,如果失败,则重试安装ro
。 (如果您不熟悉 FUSE,它是一个允许用于管理自定义文件系统的用户代码.)
/usr/bin/windowsfs
创建包含以下内容的文件。使其可执行。
#!/bin/bash
mount "$@" || mount "$@" -o ro
安装该fuse
软件包(我不确定 CentOS 上的名称,但它提供了支持 FUSE 文件系统的工具和子系统)。
在您的 中使用这样的行/etc/fstab
,它将您的 Windows 分区声明/dev/sda2
为类型fuse.windowsfs
并安装在/mnt/dsk
/dev/sda2 /mnt/dsk fuse.windowsfs defaults 0 0
当执行此行时,它会调用 FUSE 帮助程序/usr/bin/windowfs
来挂载分区。这是我们的脚本,它尝试进行可写挂载,但在必要时回退到只读挂载。
使用后,标准umount /mnt/dsk
操作足以卸载分区。
更强大的windowsfs
脚本可能如下所示,如果两个安装都失败,您将从“正常”安装中收到错误消息:
#!/bin/bash
#
exec 3>&1
error1=$(mount "$@" 2>&1 1>&3); ss1=$? ss2=0
[[ 0 -lt $ss1 ]] && { error2=$(mount "$@" -o ro 2>&1 1>&3); ss2=$?; }
[[ 0 -lt $ss2 ]] && { error="$error1" ss=$ss1; } || { error="$error2" ss=$ss2; }
[[ 0 -lt $ss ]] && echo "$error" >&2
exit $ss