Le 22 février 2011 00:56, Jean-Charles de Longueville <[email protected]> a écrit : > > Bonjour, > > chouette probleme que celui-ci. Definitivement mieux que les mots croises du > dimanche :-D >
N'est-ce pas :o)) Surtout que ca devrait concerner pas mal de monde :o) > > Le 21-févr.-11 à 11:03, [email protected] a écrit : > facilement de maniere structurelle? > > ton explication c'est ni simple ni structurelle ;-) Je ne vois rien de complique a faire du mount --bind dans un script de démarrage ;o) > en reponse, voici ce que j'en pense ;-) > > Recapitulons. Nous avons: > > /hdd/home/user/repertoire > /sdd/home/user/.fichier <== on n'y touchera pas, ils sont la ou il > faut monte naturellement avec le /etc/fstab > /sdd/home/user/.repertoire <== on n'y touchera pas, ils sont la ou il faut > monte naturellement avec le /etc/fstab > /sdd/home/user/fichier <== on n'y touchera pas, ils sont la ou il faut > monte naturellement avec le /etc/fstab, et c'est une zone que l'on souhaite > avoir pour avoir un espace user ou l'on utilise la vélocité du SSD. > > Il faut que le /home soit /sdd/home > il faut que les repertoires de donnees soient sur /hdd/home/user > il faut que les fichiers de donnees qui ne soient pas dans un sous repertoire > soient sur /sdd/home/user > il faut que l'utilisation soit transparente pour l'utilisateur (solution > accessible a l'utilisateur lambda) > Il faut que cela fonctionne pour tous les utilisateurs (solution structurelle) > > Le script suivant monte les repertoires des utilisateurs depuis hdd vers sdd > > #!/bin/bash > # depuis /etc/fstab nous avons > ## mount /dev/sdd/home /home > ## mount /dev/hdd/home /hdd/home > cd /home > for u in * > # on boucle sur les users repris dans /home > do > cd /hdd/home/$u <=========== bizarre comme idée... au contraire on se met > dans /home (qui est monte sur le SSD par le fstab, et il suffit juste d'une > boucle sur les répertoires (peut importe les .* dans ~ qui ne soient pas des > répertoires)), et si un répertoire avec un même nom existe dans /hdd/home/$u, > et bien on le monte.... sinon, on log un warning pour que l'admin sache qu'il > existe des repertoires sur le SSD. > for r in * > # on boucle sur les contenus (repertoires) des users dans hdd > do > # on verifie que r soit bien un repertoire > if [[-d $r]] > then > # on verifie que le point de montage existe > if [[-d /home/$u/$r]] > then > # on le monte > mount --bind /hdd/home/$u/$r /home/$u/$r > elif [[-e /home/$u/$r]] > then > # comme ce n'est pas un repertoire mais qu'il existe, > # c'est un fichier, il ne devrait pas etre la > echo "error: $r est un fichier et pas un repertoire, on ne peut monter un > repertoire par dessus" > # on pourrait le deplacer dans /home > # mv /hdd/home/$u/$r /home/$u/$r > else > # on cree le repertoire manquant ("point de montage") > mkdir /home/$u/$r > # et on y monte le repertoire de donnees > mount --bind /hdd/home/$u/$r /home/$u/$r > fi > fi > done > done > Premier souci: quid des repertoires crees en cours de session dans /home/user > ? que ce soit par l'utilisateur ou par root (ou un daemon)? Je ne suis pas > sur qu'un alias pour mkdir couvre tous les cas de figure! Une solution serait > de laisser faire et de deplacer ces repertoires de sdd vers hdd avant le > montage decrit ci-dessus... Dans ce cas il faut ajouter en debut du script Et même seul vraie question..... pour cela plusieurs réponses possibles: script au démarrage, un utilitaire dédié dispo dans le menu contextuel pour rendre "externalisé" le répertoire sélectionné par exemple, etc... c'est la vraiment que se pose la question. La solution du pauvre c'est aliaser la commande mkdir mais si on veut que ce soit une solution utilise par des lambda en effet, il faut faire quelque chose a ce niveau la... > #!/bin/bash > cd /home > for u in * > cd $u > for r in * > if [[-d $r]] > then > mv /home/$u/$r /hdd/home/$u/$r > fi > done > done > # et on reprend le script d'avant ici > Mais si c'est un script de démarrage et que la machine est multi-utilisateur > et peut-être jamais rebootee (c'est le cas de mon desktop partage avec ma > femme et les enfants qui n'est reboote que pour en changer le kernel) alors > le script n'est en fait jamais joue a chaud... et le SDD va vite exploser! Yep. La Rolls Royce restera l'utilitaire dédié... ou en un clic, le user migre son répertoire du SSD au HDD, et vice-versa... ou a l'inverse on peut considérer qu'il s'agit la de taches d'administration a effectuer en ligne de commande, et tout comme on gérerait des partitions, lv ou que sais-je, on gère les répertoires "externalisés" comme de vrais partitions en ligne de commande. Mon idée originale, ce qui en fait une problématique très simple avec un script 3 fois moins loin que ce que tu nous a mis au-dessus mais tout aussi simple. > Dons cherchons plutot une solution executee en debut de session. Premier > souci, le script devra etre joue par tous les gestionnaires de sessions > actifs. Pour la console, l'appel d'un tel script peut etre inclus dans > ~/.bashrc (via /etc/skel/.bashrc pour que les nouveaux utilisateurs en > profitent de maniere transparente). Autre souci evident, il faudra verifier > si un repertoire de hdd est deja lie a un autre de sdd pour eviter d'empiler > les montages identiques les uns sur les autres. Et il faudra veiller a > ajouter un script de demontage propre dans la procedure de shutdown. Linux > permettant plusieurs sessions simultanees tant en console que sous X il > faudra en outre veiller a ni monter plusieurs fois le meme repertoire ni le > demonter tant qu'il existe une session active. > > Toujours convaincu que c'est simple? moi vraiment pas :-p Tout dépend de la version que l'on veut.... si il s'agit d'exécuter un script au démarrage de la bécane, qui monte un volume externe dans /mnt/hdd, puis monte les répertoires de /mnt/hdd/$user/ dans /home/$user si les deux possèdent le répertoire, c'est en effet ce que j'appelle quelque chose de simple. Pas pour ma grand-mère, hein, mais pour des utilisateurs avancés. > Essayons neanmois. Nous verrons ensuite comment declencher ce script ci. C'est quoi ta question ? comment exécuter un script shell au demarrage de la bécane ? Et ce bien avant le demarrage d'une session X ? > Premier essai > > #!/bin/bash > cd ~ > $HOME=$(pwd) > # l'utilisateur est-il deja en session > moi=$(whoami) > cb=$(who|grep $moi|wc -l) > if (( $cb = 1 )) > # si non alors deplacons les repertoires de donnees crees depuis la derniere > session de sdd vers hdd > then > for r in * > do > if [[ -d $r]] > then > if [[ ! -d /hdd/$HOME/$r ]] > then > mv $HOME/$r /hdd/$HOME/$r > fi > fi > done > fi > # ensuite montons les repetoires de hdd qui ne sont pas encore montes sur sdd > for r in * > mount | grep -v "/hdd/$HOME/$r" && mount --bind /hdd/$HOME/$r $HOME/$r > done > > ca le fait? > > Et comment declencher ce script? > dans ~/.bashrc > dans ~/.xsession ???? > AFAIK il n'y a pas de moyen unique tous window manager confondus :-( sauf si > le mechanisme xdm qui lance le script ~/.xsession est repris par les > gestionnaire de sessions plus recents (gdm, kdm, etc) ???? On s'en fiche de windows manager, on exécute le script bien avant ! On ne fait que des mount, c'est quoi l'interaction avec X ? > Pour le shutdown, c'est relativement facile. IMHA il suffit d'ajouter dans le > script /etc/init.d/umount les lignes > > for l in `mount | gawk '/hdd/' {print $1}` > do > umount $l > done > > et vos avis? Alors je ne suis pas certain, mais je pense qu'il n'y a rien a démonter car on ne fait que binder des répertoires, en revanche quand le volume externe /mnt/hdd est démonté, ca doit faire tomber également tous les binds, en tout cas je n'ai aucun script particulier au shutdown et aucun soucis particulier... je vais quand même regarder mes logs pour être sur, des fois que j'aurais des warnings.... ++ N1c0 Diffusez cette liste aupres de vos relations :-) Linux Azur : http://www.linux-azur.org Vous etes responsable de vos propos. *** Merci de rediger sans SMS, ni HTML ni PJ ***
