J'ai créé un conteneur lxc avec Sudo lxc-create -n ubuntu-trusty-AMD64 -t ubuntu -- --Arch AMD64 --release trusty
sur Ubuntu 14.04 avec lxc 1.0.5-0ubuntu0.1 et me suis rendu compte qu'il n'existait aucun fichier de périphérique dans /dev/
pour mes disques durs. Comment puis-je les rendre disponibles (via un fichier de périphérique ou une solution de contournement similaire) dans lxc afin de pouvoir monter le périphérique?
J'ai pensé (avec le lien de Muru dans les commentaires) que l'ajout
lxc.hook.autodev = /path/to/script
dans un fichier de configuration (qui BTW?) est nécessaire et script
contient une instruction mknod
, mais je ne comprends pas l'utilisation de mknod
.
ls -a /dev/
dans le lxc donne
. dsp1 loop3 midi03 port ram15 rmidi0 stderr tty7
.. dsp2 loop4 midi1 ptmx ram16 rmidi1 stdin tty8
agpgart dsp3 loop5 midi2 pts ram2 rmidi2 stdout tty9
audio fd loop6 midi3 ram ram3 rmidi3 tty urandom
audio1 full loop7 mixer ram0 ram4 sequencer tty0 zero
audio2 kmem lxc mixer1 ram1 ram5 shm tty1
audio3 kmsg mem mixer2 ram10 ram6 smpte0 tty2
audioctl log midi0 mixer3 ram11 ram7 smpte1 tty3
console loop0 midi00 mpu401data ram12 ram8 smpte2 tty4
core loop1 midi01 mpu401stat ram13 ram9 smpte3 tty5
dsp loop2 midi02 null ram14 random sndstat tty6
J'ai essayé de monter le fichier de périphérique (même si cela semble étrange). Par conséquent, le point de montage sous /var/lib/lxc/<name>/rootfs/dev/
doit être créé. La création d'un fichier avec touch
ne fonctionne pas car l'hôte ne peut pas monter un fichier de périphérique sous un fichier. La création d'un répertoire avec mkdir
sur l'hôte fonctionne, mais ne permet pas de le monter dans lxc car il est reconnu en tant que répertoire.
Il devrait être possible de créer une image dd
du périphérique à l'aide du fichier de périphérique à l'intérieur lxc, par exemple.
Vous voulez probablement utiliser le fichier fstab:
$ cat /var/lib/lxc/ubuntu-trusty-AMD64/fstab
/dev/sdc1 mnt/sdc ext4 noatime 0 0
Il est important que le point de montage (2ème argument) ne commence pas par une barre oblique, sinon le script LXC tente de monter le système de fichiers dans le système d'exploitation hôte.
Sur Ubuntu, le fichier devrait déjà exister mais être vide. Sinon, créez-le et assurez-vous d'avoir la ligne suivante dans votre fichier de configuration:
$ grep fstab /var/lib/lxc/ubuntu-trusty-AMD64/config
lxc.mount = /var/lib/lxc/ubuntu-trusty-AMD64/fstab
Si vous avez vraiment besoin d'accéder à votre appareil, vous pouvez le rendre disponible dans votre conteneur:
$ grep devices /var/lib/lxc/ubuntu-trusty-AMD64/config
lxc.cgroup.devices.allow = b 8:1 rwm
Cela rendra/dev/sda1 disponible dans votre conteneur (8: 1 est le périphérique de bloc majeur: mineur).
Mais cela ne suffira pas. Votre conteneur n’a normalement pas l’autorisation de monter un système de fichiers. Vous devrez également utiliser la ligne suivante ou une astuce similaire:
$ grep profile /var/lib/lxc/ubuntu-trusty-AMD64/config
lxc.aa_profile = unconfined
Attention: cela permet bien plus que le montage
Si vous souhaitez accéder à vos données à partir de plusieurs conteneurs (et de l'hôte OS), vous pouvez utiliser la solution la plus courante: similaire à la première option, utilisez fstab pour lier-monter un répertoire déjà monté à votre conteneur:
$ cat /var/lib/lxc/ubuntu-trusty-AMD64/fstab
/mnt/mydata mnt/mydata none bind 0 0
Encore une fois: le premier argument est la source, le répertoire de votre système hôte. Le deuxième argument est le répertoire de votre conteneur, par rapport à sa racine. Encore une fois: NE PAS METTRE UN CACHE DEVANT LE DEUXIÈME ARGUMENT.
Si vous ne souhaitez pas créer le répertoire dans votre conteneur, vous pouvez le faire automatiquement en utilisant les options bind,create=dir
au lieu de simplement bind
Il y a deux méthodes. Je ne mentionne que le plus facile. Tout est fait dans l'hôte mais vous trouverez votre appareil monté dans le conteneur!
Montez le périphérique quelque part dans l'hôte comme d'habitude, par exemple, utilisez la commande suivante pour monter /dev/sdb1
dans /mnt/myharddisk
:
mount /dev/sdb1 /mnt/myharddisk
Créer un point de montage du conteneur dans l'hôte:
mkdir /var/lib/lxc/ubuntu-trusty-AMD64/rootfs/media/myfiles
Pour le monter dans un conteneur, utilisez-le temporairement dans l'hôte:
mount -o bind /mnt/myharddisk /var/lib/lxc/ubuntu-trusty-AMD64/rootfs/media/myfiles
Pour le monter de manière permanente, ajoutez la ligne suivante à la fin du fichier fstab du conteneur (/var/lib/lxc/ubuntu-trusty-AMD64/fstab
):
/mnt/myharddisk /var/lib/lxc/ubuntu-trusty-AMD64/rootfs/media/myfiles none bind 0 0