Disque de sauve­garde

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 bran­ché sur un Mac mini, qui est la seule machine fixe chez moi et je n’ai pas envie d’al­ler ache­ter un NAS en plus.

Le tout sera aussi sauve­gardé en ligne au cas où le disque fait défaillance (mauvaise mani­pu­la­tion, panne, vol, incen­die, dégât des eaux) mais j’ai besoin que ce soit d’abord en local et pas unique­ment dépen­dant d’un service en ligne.

Outre la défiance vis-a-vis des services en ligne, ça me permet­tra de tout remon­ter sans attendre des jours à tout télé­char­ger.

Montage du disque

C’est une machine parta­gée, donc il faut des droits d’ac­cès. Macos monte par défaut tous les disques USB avec un para­mètre noow­ners qui fait que tout le monde a les mêmes droits sur tous les fichiers.

Pour corri­ger ça il faut l’em­pê­cher de monter le disque auto­ma­tique­ment et le faire à la main avec l’op­tion owners. Je ne sais pas si c’est redon­dant mais j’ai eu des succès en ajou­tant la commande diskutil enableOwnership avec l’iden­ti­fiant du disque;

C’est un disque de sauve­garde, je fais déjà écrire beau­coup dessus en perma­nence, il faut bien penser à ajou­ter le noatime pour éviter de géné­rer des écri­tures 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 chif­fré. Pour moi c’est indis­pen­sable en cas de vol. C’est aussi néces­saire si le disque semble avoir des défaillance, que je ne peux l’ef­fa­cer mais que quelqu’un risque de réus­sir à relire quand même. Je ne veux ni ne peux me permettre que tout se balade n’im­porte où.

Je pour­rais enre­gis­trer la clé de chif­fre­ment dans le gestion­naire natif de Macos comme il m’in­vite à le faire mais je vais avoir besoin plus tard que le montage se fasse au démar­rage du disque, hors de toute session utili­sa­teur.

Je me permets donc de mettre en clair le mot de passe du disque. Tant que le script en ques­tion n’est acces­sible 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 utili­sa­teur. C’est aussi vrai pour les parti­tions chif­frées, y compris celles qu’on aurait montées à la main.

Bref, il suffit que n’im­porte qui utilise le poste et se décon­necte pour que mon disque de sauve­garde soit aux abon­nés absents, impos­sible à remon­ter 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 fonc­tion­ner.

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’in­ter­rup­tion.

trap 'bye' SIGINT SIGTERM SIGKILL
function bye() {
 cd /Volumes
 exit 1;
}

Lance­ment au démar­rage

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 unique­ment 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

Comments

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *