Você pode criar um sistema de arquivos virtual no espaço disponível dos sistemas de arquivos existentes?

3

Atualmente, tenho 4 discos ext4 no meu PC. Juntos, eles têm cerca de 4 TB de espaço disponível. Eu quero armazenar uma imagem de 3 TB apenas por um dia. É possível criar um fs virtual temporário em todo o espaço disponível dos discos.

É possível mover os arquivos para obter o espaço em uma única unidade. Eu só estou querendo saber se existe uma solução atual para algo assim.

    
por Dax 06.05.2016 / 18:38

2 respostas

4

Sim, é possível com dmsetup .

Prepare arquivos vazios

fallocate -l $((800*1024*1024*1024)) /mnt/disk1/file1
fallocate -l $((1200*1024*1024*1024)) /mnt/disk2/file2
fallocate -l $((1100*1024*1024*1024)) /mnt/disk3/file3
fallocate -l $((200*1024*1024*1024)) /mnt/disk4/file4

Este exemplo fornece 800 GiB , 1200 GiB , 1100 GiB e 200 GiB em quatro arquivos - 3300 GiB no total.

Preparar dispositivos de loop

sudo losetup -f /mnt/disk1/file1
sudo losetup -f /mnt/disk2/file2
sudo losetup -f /mnt/disk3/file3
sudo losetup -f /mnt/disk4/file4

Verifique com sudo losetup -a quais dispositivos de loop estão associados aos seus arquivos. Meu exemplo assume que eles são /dev/loop0 , /dev/loop1 , /dev/loop2 e /dev/loop3 respectivamente.

Criar dispositivo lógico

EDIT: veja a resposta do Xen2050. Dá uma maneira mais simples a partir deste ponto.
Minha maneira original e mais complexa é a seguinte:

Primeiro, você precisa saber o tamanho dos seus arquivos em 512 B unit. No meu exemplo, esses números são 800*1024*1024*2 , 1200*1024*1024*2 , 1100*1024*1024*2 e 200*1024*1024*2 ; Por exemplo, 1677721600 , 2516582400 , 2306867200 e 419430400 .

Você também precisará da soma do primeiro ...
zero números (trivial): 0 ,
um número (trivial): 1677721600 ,
dois números: 1677721600 + 2516582400 = 4194304000 ,
três números: 1677721600 + 2516582400 + 2306867200 = 6501171200 .

Espero ter feito a minha matemática corretamente. :)

Invocar:

sudo dmsetup create my_device

Agora, forneça uma tabela apropriada (mapa):

0 1677721600 linear /dev/loop0 0
1677721600 2516582400 linear /dev/loop1 0
4194304000 2306867200 linear /dev/loop2 0
6501171200 419430400 linear /dev/loop3 0

(Cada linha começa com uma soma computada seguida de tamanho computado.)

Pressione Ctrl + D para finalizar.

Criar sistema de arquivos

sudo mkfs.ext4 /dev/mapper/my_device

Montagem

sudo mkdir /mnt/my_device
sudo mount -o rw /dev/mapper/my_device /mnt/my_device

Observe que há menos de 3300 GiB de espaço livre em my_device devido às necessidades do sistema de arquivos. Ajuste os tamanhos dos seus arquivos antecipadamente, dependendo do espaço livre disponível nas suas partições e do tamanho da imagem.

Quando seu trabalho terminar:

Reverter

sudo umount /mnt/my_device
sudo dmsetup remove my_device
sudo losetup -d /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3
rm /mnt/disk1/file1 /mnt/disk2/file2 /mnt/disk3/file3 /mnt/disk4/file4
    
por 06.05.2016 / 20:37
2

Usar mdadm para configurar o RAID é outra opção, semelhante à resposta de Kamil, mas esperamos que sem toda a matemática.

Uma vez que há um arquivo grande em cada partição ( fallocate parece ser bom) e dispositivos de loop configurados, então, de acordo com as instruções em link (substituindo o exemplo /dev/sdbN devices pelo seu /dev/loopN devices e --raid-devices=2 pelo number of devices (no seu caso 4):

  1. Primeiro - instalar o mdadm
    • Debian, Ubuntu: apt-get instala o mdadm
    • Gentoo: emerge mdadm
    • RedHat: yum install mdadm

Linear mode

Ok, so you have two or more partitions which are not necessarily the same size (but of course can be), which you want to append to each other.

Spare-disks are not supported here. If a disk dies, the array dies with it. There's no information to put on a spare disk.

Using mdadm, a single command like

mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdb6 /dev/sdc5

should create the array. The parameters talk for themselves. The output might look like this

mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

Have a look in /proc/mdstat. You should see that the array is running.

Now, you can create a filesystem, just like you would on any other device, mount it, include it in your /etc/fstab and so on.

RAID-0

You have two or more devices, of approximately the same size, and you want to combine their storage capacity and also combine their performance by accessing them in parallel.

mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb6 /dev/sdc5

Like in Linear mode, spare disks are not supported here either. RAID-0 has no redundancy, so when a disk dies, the array goes with it.

Having run mdadm you have initialised the superblocks and started the raid device. Have a look in /proc/mdstat to see what's going on. You should see that your device is now running.

/dev/md0 is now ready to be formatted, mounted, used and abused.

Eu não acho que você queira o RAID-0, já que no seu caso cada parte está na mesma unidade, e provavelmente retardaria o acesso com tentativas desnecessárias de leitura de cada parte ao mesmo tempo. Mas parece uma resposta mais completa para incluí-lo.

  • Também parece importante Salvar a configuração RAID também, com o comando abaixo. Olhe para a saída (ou no arquivo mdadm.conf) para ver o UUID do RAID também.

    mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Alguns outros comandos úteis (consulte man mdadm ):

  • mdadm --query /dev/md0 - Examine um dispositivo (matriz ou dispositivo de componente, ex. / dev / loop1) para ver (1) se é um dispositivo md e (2) se for um componente de uma matriz md)
  • mdadm --examine /dev/loop1 - Imprimir o conteúdo dos metadados armazenados no dispositivo
  • mdadm --detail /dev/md0 - informações detalhadas da matriz, UUID
  • mdadm --stop /dev/md0 - Pare uma matriz
  • mdadm --assemble --scan - Monta e inicia todas as matrizes listadas no arquivo de configuração padrão (/etc/mdadm/mdadm.conf no Ubuntu, Debian? Se a configuração é salva como acima).
    • Também iniciará todas as matrizes em /etc/mdadm/mdadm.conf
  • mdadm --scan --assemble --uuid=a26bf396:31389f83:0df1722d:f404fe4c - Monta apenas a matriz com o UUID fornecido.
  • mdadm --assemble /dev/md0 /dev/loop1 /dev/loop2 [all devices] - montar & começar, da maneira mais difícil

O LVM pode funcionar também, mas a partir da leitura do link e link e man lvm pode não ser tão simples quanto o RAID acima. Aparentemente (?) Os comandos lvm parecem olhar para todos os dispositivos conectados ao seu computador, então eu posso ver o potencial de incluir os dispositivos errados por engano ... Provavelmente há um comando em algum lugar para contornar isso ...

    
por 07.05.2016 / 09:38