Crie um auxiliar do FUSE em /usr/bin
que tente uma rw
de montagem e, se isso falhar, tente novamente com ro
mount. (Caso você não esteja familiarizado com o FUSE, é um subsistema que permite que o código do usuário gerencie sistemas de arquivos personalizados .)
Crie o arquivo /usr/bin/windowsfs
com o seguinte conteúdo. Torne isso executável.
#!/bin/bash
mount "$@" || mount "$@" -o ro
Instale o pacote fuse
(não tenho certeza do nome no CentOS, mas é o que fornece as ferramentas e o subsistema para suportar sistemas de arquivos FUSE).
Use uma linha como essa no seu /etc/fstab
, que declara sua partição do Windows /dev/sda2
como sendo do tipo fuse.windowsfs
e que será montada em /mnt/dsk
/dev/sda2 /mnt/dsk fuse.windowsfs defaults 0 0
Quando essa linha é usada, ela chama o auxiliar FUSE /usr/bin/windowfs
para montar a partição. Esse é o nosso script que tenta uma montagem gravável, mas retorna a uma montagem somente leitura, se necessário.
Uma operação padrão umount /mnt/dsk
é suficiente para desmontar a partição após o uso.
Um script windowsfs
mais robusto pode ter essa aparência, onde você obteria a mensagem de erro da montagem "normal" se as duas montagens falhassem:
#!/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