Como tornar um arquivo de dispositivo HDD / dev / sdxY disponível no container lxc?

3

Eu criei um contêiner lxc com sudo lxc-create -n ubuntu-trusty-amd64 -t ubuntu -- --arch amd64 --release trusty no Ubuntu 14.04 com lxc 1.0.5-0ubuntu0.1 e percebi que não há arquivos de dispositivo em /dev/ para meus HDDs. Como posso disponibilizá-los (via arquivo de dispositivo ou uma solução semelhante) no lxc para que eu possa montar o dispositivo?

Eu percebi (com o link de Muru nos comentários) que adicionar

lxc.hook.autodev = /path/to/script

para um arquivo de configuração (que BTW?) é necessário e script contém uma instrução mknod , mas não entendo o uso de mknod .

ls -a /dev/ no lxc dá

.         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

Eu tentei montar o arquivo do dispositivo (embora pareça estranho). Portanto, o ponto de montagem sob /var/lib/lxc/<name>/rootfs/dev/ precisa ser criado. Criar um arquivo com touch não funciona porque o host não pode montar um arquivo de dispositivo em um arquivo. Criar um diretório com mkdir no host funciona, mas não permite montá-lo no lxc porque ele é reconhecido como diretório.

Deve ser possível criar uma imagem dd do dispositivo usando o arquivo de dispositivo dentro do lxc, por exemplo.

    
por Karl Richter 25.09.2014 / 03:38

2 respostas

1

opção fstab

Você provavelmente quer usar o arquivo fstab:

$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/dev/sdc1   mnt/sdc ext4    noatime 0 0

É importante que o ponto de montagem (2º argumento) não comece com uma barra, caso contrário o script LXC tenta montar o sistema de arquivos no sistema operacional host.

No Ubuntu, o arquivo deve existir, mas vazio. Se não, basta criá-lo e verifique se você tem a seguinte linha no seu arquivo de configuração:

$ grep fstab /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.mount = /var/lib/lxc/ubuntu-trusty-amd64/fstab

opção de dispositivo

Se você realmente precisa acessar o seu dispositivo, pode disponibilizá-lo no seu contêiner:

$ grep devices /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.cgroup.devices.allow = b 8:1 rwm

Isso tornará o / dev / sda1 disponível em seu contêiner (8: 1 é o dispositivo de bloco maior: menor).

Mas isso não será suficiente. Seu contêiner normalmente não tem permissão para montar qualquer sistema de arquivos. Você precisará usar a seguinte linha ou um truque similar também:

$ grep profile /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.aa_profile = unconfined

Atenção: isso permite muito mais do que apenas montar

opção de diretório compartilhado

Se você quiser acessar seus dados a partir de vários contêineres (e do sistema operacional do host), talvez queira usar a solução mais comum: Similar à primeira opção, use o fstab para vincular a montagem de um diretório montado de contêiner:

$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/mnt/mydata mnt/mydata  none bind 0 0

Novamente: o primeiro argumento é a fonte, o diretório no seu sistema operacional host. O segundo argumento é o diretório em seu contêiner, relativo a sua raiz. Novamente: NÃO COLOQUE UM SLASH NA FRENTE DO SEGUNDO ARGUMENTO.

Se você não quiser criar o diretório em seu contêiner, poderá fazer isso automaticamente usando as opções bind,create=dir em vez de simplesmente bind

    
por Daniel Alder 20.05.2015 / 17:28
0

Existem dois métodos. Eu só mencionei o mais fácil. Tudo é feito no host, mas você encontrará seu dispositivo montado no contêiner!

Monte o dispositivo em algum lugar do host normalmente, por exemplo, use o seguinte comando para montar /dev/sdb1 em /mnt/myharddisk :

mount /dev/sdb1 /mnt/myharddisk

Criar ponto de montagem do contêiner no host:

mkdir /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles

Para montá-lo no contêiner, use temporariamente isso no host:

mount -o bind /mnt/myharddisk /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles

Para montá-lo permanentemente adicione a seguinte linha no final do fstab do contêiner ( /var/lib/lxc/ubuntu-trusty-amd64/fstab ):

/mnt/myharddisk /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles none bind 0 0
    
por SuB 12.12.2014 / 20:57