有条件地挂载 Windows 分区

有条件地挂载 Windows 分区

由于我使用双启动(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

相关内容