J’ai un SSD de 8 To dédié à ça. L’idée c’est de me donner un peu de mou sachant que j’en utilise au moins 3 To.
Je l’ai branché sur un Mac mini, qui est la seule machine fixe chez moi et je n’ai pas envie d’aller acheter un NAS en plus.
Le tout sera aussi sauvegardé en ligne au cas où le disque fait défaillance (mauvaise manipulation, panne, vol, incendie, dégât des eaux) mais j’ai besoin que ce soit d’abord en local et pas uniquement dépendant d’un service en ligne.
Outre la défiance vis-a-vis des services en ligne, ça me permettra de tout remonter sans attendre des jours à tout télécharger.
Montage du disque
C’est une machine partagée, donc il faut des droits d’accès. Macos monte par défaut tous les disques USB avec un paramètre noowners qui fait que tout le monde a les mêmes droits sur tous les fichiers.
Pour corriger ça il faut l’empêcher de monter le disque automatiquement et le faire à la main avec l’option owners. Je ne sais pas si c’est redondant mais j’ai eu des succès en ajoutant la commande diskutil enableOwnership
avec l’identifiant du disque;
C’est un disque de sauvegarde, je fais déjà écrire beaucoup dessus en permanence, il faut bien penser à ajouter le noatime pour éviter de générer des écritures inutiles.
Au final :
# GUID du disque, les /dev/disk* ne sont pas stables
GUID="xxxxx"
# Point de montage
DIR="/Volumes/data"
mkdir -m 0750 $DIR 2> /dev/null
diskutil mount -mountOptions noauto,nosuid,nodev,noatime,nobrowse,owners -mountPoint $DIR $GUID && diskutil enableOwnership $GUID
On chiffre
Le disque est chiffré. Pour moi c’est indispensable en cas de vol. C’est aussi nécessaire si le disque semble avoir des défaillance, que je ne peux l’effacer mais que quelqu’un risque de réussir à relire quand même. Je ne veux ni ne peux me permettre que tout se balade n’importe où.
Je pourrais enregistrer la clé de chiffrement dans le gestionnaire natif de Macos comme il m’invite à le faire mais je vais avoir besoin plus tard que le montage se fasse au démarrage du disque, hors de toute session utilisateur.
Je me permets donc de mettre en clair le mot de passe du disque. Tant que le script en question n’est accessible que par root, ça me va.
# GUID du disque, les /dev/disk* ne sont pas stables
GUID="xxxxx"
# Point de montage
DIR="/Volumes/data"
# Mot de passe du système de fichier
PASS="xxxxxx"
diskutil apfs unlockVolume $GUID -passphrase $PASS -nomount
mkdir -m 0750 $DIR 2> /dev/null
diskutil mount -mountOptions noauto,nosuid,nodev,noatime,nobrowse,owners -mountPoint $DIR $GUID && diskutil enableOwnership $GUID
RES=$?
sudo chgrp Famille $DIR
sudo chmod 750 $DIR
On garde actif
Par défaut Macos démonte tous les disques USB quand on ferme la session utilisateur. C’est aussi vrai pour les partitions chiffrées, y compris celles qu’on aurait montées à la main.
Bref, il suffit que n’importe qui utilise le poste et se déconnecte pour que mon disque de sauvegarde soit aux abonnés absents, impossible à remonter vu que seul root peut accéder au mot de passe du disque.
J’ai ajouté en fin de script une petite boucle qui « occupe » le disque et empêche qu’il soit démonté. Ça a l’air de fonctionner.
cd $DIR
while true; do
sleep 10;
done
Il faut quand même pouvoir arrêter le système, donc le script doit savoir réagir à un signal d’interruption.
trap 'bye' SIGINT SIGTERM SIGKILL
function bye() {
cd /Volumes
exit 1;
}
Lancement au démarrage
Je n’ai pas trouvé d’autres méthodes qu’un fichier plist dans /Library/LaunchDaemons
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>xxxx.backup-disk</string>
<key>OnDemand</key>
<false/>
<key>UserName</key>
<string>root</string>
<key>GroupName</key>
<string>wheel</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/mount-data.sh</string>
</array>
<key>RunAtLoad</key>
<true />
<key>KeepAlive</key>
<false/>
<key>LaunchOnlyOnce</key>
<true/>
</dict>
</plist>
Le script de montage complet est dans /usr/local/sbin
, en lecture uniquement pour root.
#!/bin/sh
# GUID du disque, les /dev/disk* ne sont pas stables
GUID="xxxxx"
# Point de montage
DIR="/Volumes/data"
# Mot de passe du système de fichier
PASS="xxxxxx"
trap 'bye' SIGINT SIGTERM SIGKILL
function bye() {
cd /Volumes
exit 1;
}
diskutil apfs unlockVolume $GUID -passphrase $PASS -nomount
mkdir -m 0750 $DIR 2> /dev/null
diskutil mount -mountOptions noauto,nosuid,nodev,noatime,nobrowse,owners -mountPoint $DIR $GUID && diskutil enableOwnership $GUID
RES=$?
sudo chgrp Famille $DIR
sudo chmod 750 $DIR
cd $DIR
while true; do
sleep 10;
done
Laisser un commentaire