web-dev-qa-db-fra.com

Le meilleur moyen de créer un système de fichiers racine, divisé en lecture seule et en écriture

Mon objectif est de créer un système dans lequel les principales parties du système de fichiers racine sont stockées sur une carte SD en lecture seule, avec des parties enregistrables situées sur un disque SSD défini sur rw. Cela doit être fait dans le but de préserver le système de fichiers racine de toute altération et corruption, et de faire de la mise à jour et de toute autre maintenance un cas de permutation sur une carte SD préconfigurée. J'utilise Ubuntu 14.04 LTS.

Je suis satisfait de la partition et du montage habituels pour prendre en charge/home,/var, etc., mais cela devient beaucoup plus délicat lorsqu'il s'agit de/etc. Je sais que certaines parties de/etc doivent être accessibles en écriture, telles que mtab, et je sais aussi que/etc est accessible au démarrage. J’ai le sentiment qu’il est également conseillé d’avoir des parties de/etc persistantes entre les bottes.

Je suis enclin à utiliser des superpositions, uniquement sur/etc, avec upperdir contenant uniquement les fichiers que je souhaite conserver. Tout ce qui n'a besoin que d'être lu à partir de/etc passera par lowerdir. Upperdir sera accessible en écriture avec les nouveaux fichiers, même si ceux-ci ne persisteront que lors des démarrages, s'ils sont identifiés dans une liste blanche. Un script doit s’exécuter lors de l’arrêt pour copier ces fichiers de upperdir vers la liste blanche, et l’inverse directement après le démarrage (ou pendant si nécessaire).

MODIFIER

La liste blanche vise à arrêter tout nouveau fichier écrit dans upperdir et persistant entre deux bottes. Je vais utiliser les autorisations pour gérer cela aussi.

Est-ce un bon moyen d'obtenir le résultat que je veux et quels sont les problèmes que je devrais connaître?

J'ai lu des explications sur l'utilisation de mount -bind, mais je comprends que cela a des problèmes qui lui sont propres. Je suis également conscient de la méthode permettant de faire un lien symbolique entre/etc/mtab et/proc/mounts/et je me méfie de cette approche.

Toute aide serait grandement appréciée, j'ai beaucoup lu sur les forums et grâce à la recherche générale sur le Web, les détails sur la mise en œuvre de superpositions sont très rares. S'il vous plaît, n'hésitez pas à me faire savoir si je complique énormément les choses ou s'il existe une meilleure approche. C'est aussi ma première question alors soyez gentil s'il vous plait !!

MODIFIER

Je me suis rendu compte que ma question était un peu nébuleuse et fondée sur l'opinion, alors j'ai pensé que je pourrais reformuler ma question.

Existe-t-il un autre moyen utile de configurer ce type de système, autre qu'un système de montage en union?

2
Arronical

aufs (éventuellement UnionFS) est ancien et superpose dans une nouvelle solution pour cela sous Ubuntu. Ce script pour les superpositions a fonctionné couramment pour moi avec 14.04.1

Donc, vous devez copier le script dans /etc/initramfs-tools/scripts/init-bottom/root-ro, puis

#make the script executable
cmdod 755 /etc/initramfs-tools/scripts/init-bottom/root-ro

#add the module overlayfs to initramfs
echo overlayfs >> /etc/initramfs-tools/modules

#update initramfs
update-initramfs -u
update-grub

Redémarrez pour essayer. Puis lancez mount, vous devriez avoir la sortie:

overlayfs-root sur/type overlayfs (rw)

Vous trouverez /mnt/root-rw et /mnt/root-ro Répertoires pour les couches "inférieure" et "supérieure" de vos superpositions.

Vous pouvez également ajouter au menu grub la possibilité de charger sans superposition:

echo overlayfs >> /etc/initramfs-tools/modules
cp root-ro /etc/initramfs-tools/scripts/init-bottom/root-ro
chmod 755 cp /etc/initramfs-tools/scripts/init-bottom/root-ro

#########################GRUB#########################
cat /etc/grub.d/10_linux|sed  s/'linux_entry "${OS}" "${version}" simple'/'linux_entry "RW: ${OS}" "${version}" simple'/ |sed  s/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"'/'"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} disable-root-ro=true"'/ >/etc/grub.d/11_custom

sed -i.orig -e \
"/{GRUB_DISABLE_RECOVERY}\" != \"xtrue\" ]; then/s/^.*$/    \
if [ 0 ]; then/" \
/etc/grub.d/11_custom

sed -i.orig -e \
"/in_submenu=:/s/^.*$/    \
/" \
/etc/grub.d/11_custom

sed -i.orig -e \
"/\"Previous Linux versions/s/^.*$/    \
if [ 0 ]; then/" \
/etc/grub.d/11_custom

rm /etc/grub.d/11_custom.orig
#########################GRUB#########################

chmod 777 /etc/grub.d/11_custom
3
BBK

Je suis un peu plus loin dans la mise en œuvre de ce système, et tout semble aller bien pour le moment. Cela signifie probablement qu'il est sur le point de s'effondrer!

Utiliser Overlayfs pour créer un système de fichiers union semble être une solution pratique, bien que je n’aie pas encore abordé le problème des scripts commençant au démarrage! Cependant, il existe une documentation abondante sur la manière de faire cette partie du processus.

Le lien posté ci-dessus par @Rinzwind était un guide vraiment judicieux, et est répété ici; http://www.logicsupply.com/blog/2009/01/27/how-to-build-a-read-only-linux-system/

0
Arronical