Monta condicionalmente a partição do Windows

1

Como estou usando dual-boot (Windows 10 / CentOS 7), quero que alguns arquivos sejam compartilhados entre os dois sistemas operacionais, como música, fotos etc. Então, eu achei que seria bom montar automaticamente minha partição de dados do Windows durante a inicialização. No entanto, isso nem sempre é possível porque eu precisei hibernar o Windows, reinicializar no Linux para fazer algo e voltar ao Windows novamente.

Então, como posso montar automaticamente essa partição durante a inicialização, mas com a condição de que: "se ela foi detectada como" impura ", monte-a somente leitura"?

    
por Arkoudinos 03.09.2016 / 15:19

1 resposta

1

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
    
por 08.09.2016 / 13:20