Comment créer un système en direct sur un lecteur USB avec des changements persistants sur le disque / disque dur

10

J'essayais d'installer Ubuntu en direct sur une clé USB avec des changements persistants. Cependant, je voulais écrire les modifications sur le disque dur au lieu de l'USB pour diverses raisons (performances, espace).

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 puis-je créer un nouveau fichier casper-rw sur le disque dur et rediriger le système Ubuntu live sur la clé USB vers le disque dur?

modifier le 14/07/2015:

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

Si le partitionnement est une option, je pense que la réponse indiquée ici est très bonne, car elle ne nécessite que de créer une nouvelle partition, de l'étiqueter casper-rw et vous avez terminé (le travail est excellent, je l'ai testé).

Si l'achat de nouveau matériel est une option, un lecteur flash USB 3.0 (MLC ou SLC), des disques durs portables, eSATA et d'autres options viennent à l'esprit qui ont de bien meilleures performances qu'un lecteur flash USB2.0 moyen.

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

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

LS
la source
Je ne sais pas si c'est une option, mais si vous avez seulement besoin d'enregistrer des données, vous pouvez également simplement monter une partition HDD quelque part dans votre arborescence de système de fichiers en direct ... De cette façon, vous n'avez que des dossiers spécifiques situés sur le disque.
Byte Commander
@ByteCommander merci pour votre commentaire. Malheureusement, le partitionnement du disque dur n'est pas une option pour moi et je voudrais que tout soit aussi compact que possible afin que je puisse supprimer les données rapidement et simplement, donc un seul fichier sur le disque dur serait idéal.
LS
Il devrait être possible de monter un fichier contenant une image d'un système de fichiers (par exemple .iso ou .img, probablement plus) également. Malheureusement, je n'ai jamais fait cela et je ne peux pas vous dire comment le faire ...
Byte Commander
Comment savez-vous que cela ne fonctionne pas? Votre fichier est-il nommé casper-rw ? Est-ce à la racine de votre partition ? Je l'ai fait (en utilisant la persistance sur le disque dur avec une partition intitulée casper-rw à la place) et je ne me souviens d'aucune étape supplémentaire nécessaire.
solsTiCe
Votre dernière modification rend votre question trop spécifique pour être largement utilisée (ce que ma réponse est ...) Ce n'est pas impossible, mais cela signifierait créer des scripts et des règles udev pour [démonter] - [synchroniser sur le disque dur] - [monter] lors de l'insertion et [synchroniser sur le disque dur] lors du démontage, mais cela représente une tonne de travail et n'est pas vraiment adapté à un site de questions / réponses comme celui-ci.
Fabby

Réponses:

4

Vous pouvez facilement mettre le système de fichiers accessible en écriture (dans le fichier casper-rw) pour un média en direct sur un disque dur. La limitation est que le fichier casper-rw doit aller sur une partition FAT. Les machines plus récentes (UEFI) ont 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 suffisamment grande, vous pouvez créer des répertoires contenant chacun un fichier casper-rw pour des médias en direct éventuellement différents. 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 utiliserons / 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 vos médias en direct créés avec persistance et modifiez le fichier /boot/grub/grub.cfg et le fichier /syslinux/txt.cfg, en ajoutant après le mot "persistant"

"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 tout. 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 casper-rw du disque dur sur l'USB et emporter vos modifications avec vous.


Le chemin persistant ne permet aucune référence de disque explicite, il doit 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 "persistant", votre système de fichiers compressé sur l'USB lent sera copié dans le 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 pas poser de problème mais ...)

ubfan1
la source
Merci. Cela rend les choses beaucoup plus claires. Je suppose que dans l'état de démarrage, ntfs ne peut pas être reconnu (non?), Ce qui rend impossible d'avoir un casper-rw sur une partition ntfs. Je pense donc que j'irai soit avec la partition ext4 étiquetée casper-rw ou essayer des trucs "toram" ou ramdrive.
LS
Comment modifiez-vous grub.cfgou syslinux.txtétant donné que vous ne pouvez monter le média en direct qu'en lecture seule car il s'agit d'une iso ??
solsTiCe
Ce qui précède a utilisé l'ISO pour créer une clé USB en direct, sur laquelle les fichiers sont inscriptibles. Le démarrage direct de l'ISO (sur un disque dur par exemple) utilise un grub entièrement distinct (celui du disque dur) dont les fichiers sont modifiables - ce cas n'utilisant pas du tout les mécanismes de démarrage de l'ISO.
ubfan1
7

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

  1. Installez Ubuntu sur une clé USB SLC (USB 3.0 préféré si votre matériel le prend en charge) sans aucun des trucs casper (juste une installation normale, en 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! Ce sont donc vraiment de petits SSD sur un bâton!

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

    Dans votre /etc/sysctl.confajout:

    # 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/fstabajouter les paramètres audacieux à votre ligne USB de démarrage. (Ce sera probablement sdcou 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 qui a très peu de fichiers et un utilisateur normal qui aura son répertoire personnel sur le disque dur.

  4. Insérez seulement maintenant le disque dur et ajoutez les informations nécessaires au disque dur pour fstabmonter 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 (si c'est le cas, seul l'utilisateur administrateur y aura accès, pas l'utilisateur normal)

  5. Connectez-vous maintenant en tant qu'utilisateur administrateur et déplacez le répertoire personnel 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 suffisante pour mon cas d'utilisation et pas trop chère et elle a environ 5 ans maintenant et fonctionne toujours!)

Fabby
la source