web-dev-qa-db-fra.com

Comment créer un système actif sur un lecteur USB avec des modifications persistantes sur le disque / disque dur

J'essayais d'installer Ubuntu Live sur un lecteur USB avec des modifications persistantes. Cependant, je voulais écrire les modifications sur le disque dur au lieu de l'USB pour diverses raisons (Performance, Space).

J'ai découvert que les modifications sont gérées dans un fichier avec un système de fichiers ext3 monté par le système (casper-rw). Mais il semble être détecté automatiquement sur le lecteur flash au démarrage.

Comment créer un nouveau fichier casper-rw sur le disque dur et rediriger le système live Ubuntu sur le lecteur USB vers le disque dur?

edit 2015-07-14:

Merci pour les réponses jusqu'à présent. Ils sont très intéressants et aident beaucoup à mieux comprendre les mécanismes de la "fonctionnalité de sauvegarde persistante du système actif" et à montrer de bonnes approches pour résoudre le problème. Malheureusement, j’essayais de surmonter certaines limitations que j’avais à l’esprit lorsque je posais la question concernant l’accès au système hôte et/ou l’accès au nouveau matériel que je n’ai pas clairement indiqué (désolé pour cela).

Si le partitionnement est une option, je pense que la réponse est indiquée ici est très bon, car il vous suffit de créer une nouvelle partition, appelez-la casper-rw et vous avez terminé (le travail est excellent, j'ai testé il).

Si l’achat de nouveau matériel est une option, lecteur flash USB3.0 (MLC ou SLC), disques durs portables, eSATA et d’autres options viennent à l’esprit qui offrent des performances bien supérieures à celles d’un lecteur flash USB2.0 moyen.

Je me demandais donc s’il existait un moyen de créer un fichier casper-rw au lieu d’une partition sur un disque avec un accès limité à (ou de copier/lier celui sur le lecteur flash).

De cette façon, il serait facile de copier le fichier casper-rw sur le lecteur flash et de le réutiliser ou de le déplacer vers un autre ordinateur, offrant ainsi une grande flexibilité, des modifications minimales du disque dur et une suppression facile des modifications apportées. le système.

10
L.S.

Vous pouvez facilement placer le système de fichiers inscriptible (dans le fichier casper-rw) pour un média en direct sur un disque dur. La limitation est que le fichier casper-rw doit être placé sur une partition FAT. Les nouvelles machines (UEFI) possèdent toutes une partition FAT EFI, mais celle-ci est généralement trop petite pour contenir un fichier casper-rw 1G-4G. Sur une autre partition FAT assez grande, vous pouvez créer des répertoires, chacun contenant un fichier casper-rw pour éventuellement différents médias en direct. Supposons que sda11 soit 10G et possède un système de fichiers FAT 10G, monté sur/mnt/sda11, sur lequel se trouvent les répertoires/A,/B,/C,/D et/E. Supposons que nous utilisions/A pour nos médias persistants, en y mettant un casper-rw.

cd /mnt/sda11/A
dd if=/dev/zero of=casper-rw bs=1M  count=4096
mkfs.ext4 -F -O^has_journal -L casper-rw casper-rw

Prenez votre média live créé avec persistance et éditez le fichier /boot/grub/grub.cfg et le fichier /syslinux/txt.cfg, en ajoutant après le mot "persistent"

"persistent-path=/A"

/boot/grub/grub.cfg ...

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- cdrom-detect/try-usb=true noprompt persistent persistent-path=/A
    initrd  /casper/initrd.lz
}

/syslinux/txt.cfg

default live
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz.efi
append noprompt cdrom-detect/try-usb=true persistent persistent-path=/A file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash ---
label live-install
...

C'est ça. Vous n'avez même pas besoin de renommer/supprimer le fichier casper-rw sur le support USB.


S'il y a de la place sur le support USB, vous pouvez même copier le disque dur du disque dur sur l'USB et emporter vos modifications.


Le chemin persistant n'autorisant aucune référence de disque explicite, il devrait donc être unique sur toutes les partitions FAT. Testé avec 1 ou 2 partitions FAT (l’une étant la partition EFI). Ne fonctionnera pas sur un système de fichiers ext2 ou ntfs au lieu de FAT. Si vous ajoutez également le mot "toram" sur la même ligne que le mot "persistant", votre système de fichiers compressé sur le périphérique USB lent sera copié dans la RAM et donnera de bien meilleures performances. Cependant, il semble y avoir un problème d'arrêt, avec la partition FAT. ne pas être proprement démonté (ce qui ne semble poser aucun problème mais ...)

4
ubfan1

C'est extrêmement facile si vous utilisez la configuration suivante:

  1. Installez Ubuntu sur un clé USB SLC (USB 3.0 préféré si votre matériel le prend en charge) sans aucun élément du casper (juste une installation normale, traitant la clé USB comme un SSD.)

    Pourquoi? Les SLC sont deux fois plus chers que les MLC mais ils sont 4 fois plus rapides et durent 8 * plus longtemps! Donc, ce sont vraiment de petits SSD sur un stick!

  2. Optimisez le système et traitez la clé USB comme un petit SSD. Ainsi:

    Dans votre /etc/sysctl.conf ajoutez:

    # Fabby: change the "swappiness" to 10 to prevent swapping as much as possible
    # to not wear out the USB stick as the Ubuntu default is optimized for a server.
    # 10 to balance with vfs_cache_pressure
    vm.swappiness = 10
    
    # Fabby: Lower vfs_cache_pressure to 75% 
    # (once cached, probably not immediately needed any more)
    #
    # This percentage value controls the tendency of the kernel to reclaim
    # the memory which is used for caching of directory and inode objects.
    #
    # At the default value of vfs_cache_pressure=100 the kernel will attempt to
    # reclaim dentries and inodes at a "fair" rate with respect to pagecache and
    # swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
    # to retain dentry and inode caches.
    vm.vfs_cache_pressure = 75
    
    # Fabby: Good to improve sequential reads (stop stuttering in movie play)
    # Can also be implemented per disk using udev rules
    vm.max-readahead=2048
    vm.min-readahead=1024
    

    Dans votre /etc/fstab ajoutez le paramères audacieux à votre ligne USB de démarrage. (Ce sera probablement sdc ou sdd. Ce qui suit est un exemple, utilisez UID si possible)

    /dev/sdc / ext4 defaults,noatime,discard,errors=remount-ro 0 1

  3. créer 2 utilisateurs: un utilisateur administrateur qui a son répertoire personnel sur la clé USB mais ne contient que très peu de fichiers et un utilisateur normal qui aura son répertoire personnel sur le disque dur.

  4. Seulement maintenant , insérez le disque dur et ajoutez les informations nécessaires sur votre disque dur à votre fstab pour monter automatiquement le disque dur et ajouter les paramètres suivants:

    nobootwait,nofail

    pour permettre le démarrage même lorsque le disque dur n'est pas présent (dans ce cas, seul l'utilisateur admin aura accès, pas l'utilisateur normal)

  5. Connectez-vous maintenant en tant qu'utilisateur admin et déplacez le répertoire de base de l'utilisateur normal de la clé USB vers le disque dur:

cp --preserve=all /home/NormalUser/* /media/ExternalHDD/NormalUser

Si tout va bien:

rm --recursive --force /home/NormalUser/*
cd /home
ln --symbolic /media/ExternalHDD/NormalUser

Terminé! :-)

Pour mémoire: j'ai une clé USB 2.0 MLC de 16 Go comme celle-ci (plus que suffisant pour mon cas d'utilisation et pas trop cher; il a maintenant environ 5 ans et fonctionne encore!)

7
Fabby