3

В настоящее время у меня есть 4 диска ext4 на моем компьютере. Вместе у них есть около 4 ТБ свободного места. Я хочу хранить изображение размером 3 ТБ всего на один день. Можно ли создать временный виртуальный фс по всему доступному пространству дисков.

Я могу перемещать файлы, чтобы освободить место на одном диске. Мне просто интересно, есть ли текущее решение для чего-то подобного.

2 ответа2

4

Да, это возможно с помощью dmsetup .

Подготовьте пустые файлы

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

Этот пример дает 800 GiB , 1200 GiB , 1100 GiB и 200 GiB в четырех файлах - всего 3300 GiB .

Подготовить петлевые устройства

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

Проверьте с помощью sudo losetup -a какие устройства петли связаны с вашими файлами. В моем примере предполагается, что они /dev/loop0 , /dev/loop1 , /dev/loop2 и /dev/loop3 соответственно.

Создать логическое устройство

РЕДАКТИРОВАТЬ: см. Ответ Xen2050. Это дает более простой способ с этой точки зрения.
Мой оригинальный, более сложный способ заключается в следующем:

Сначала вы должны знать, насколько велики ваши файлы в 512 B В моем примере это числа 800*1024*1024*2 , 1200*1024*1024*2 , 1100*1024*1024*2 и 200*1024*1024*2 ; т.е. 1677721600 , 2516582400 , 2306867200 и 419430400 .

Вам также понадобится сумма первого ...
нулевые числа (тривиальные): 0 ,
один номер (тривиальный): 1677721600 ,
два числа: 1677721600 + 2516582400 = 4194304000 ,
три числа: 1677721600 + 2516582400 + 2306867200 = 6501171200 .

Я надеюсь, что я сделал мою математику правильно. :)

Призовите:

sudo dmsetup create my_device

Теперь приведем правильную таблицу (карту):

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

(Каждая строка начинается с вычисленной суммы, за которой следует вычисленный размер.)

Нажмите Ctrl+D, чтобы закончить.

Создать файловую систему

sudo mkfs.ext4 /dev/mapper/my_device

гора

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

Обратите внимание, что на 3300 GiB имеется менее my_device свободного места из-за потребностей файловой системы. Заранее настройте размеры файлов в зависимости от свободного места на ваших разделах и размера изображения.


Когда ваша работа закончится:

возвращаться

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
2

Использование mdadm для настройки RAID - это еще один вариант, похожий на ответ Камиля, но, надеюсь, без всякой математики.

Как только в каждом разделе есть большой файл (fallocate выглядит нормально) и настроены циклические устройства, тогда в соответствии с инструкциями на https://raid.wiki.kernel.org/index.php/RAID_setup (заменив пример /dev/sdbN устройства с вашими устройствами /dev/loopN и --raid-devices=2 с количеством устройств (в вашем случае 4):

  1. Первый - установить mdadm
    • Debian, Ubuntu: apt-get установить mdadm
    • Gentoo: emerge mdadm
    • RedHat: yum install mdadm

Линейный режим

Итак, у вас есть два или более раздела, которые не обязательно имеют одинаковый размер (но, конечно, может быть), которые вы хотите добавить друг к другу.

Запасные диски здесь не поддерживаются. Если диск умирает, массив умирает вместе с ним. Там нет информации, чтобы положить на запасной диск.

Используя mdadm, одну команду, такую как

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

должен создать массив. Параметры говорят сами за себя. Вывод может выглядеть так

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

Загляните в /proc /mdstat. Вы должны увидеть, что массив работает.

Теперь вы можете создать файловую систему, как и на любом другом устройстве, смонтировать ее, включить в ваш /etc /fstab и так далее.

RAID-0

У вас есть два или более устройства примерно одинакового размера, и вы хотите объединить их емкость хранения, а также объединить их производительность путем параллельного доступа к ним.

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

Как и в линейном режиме, запасные диски здесь также не поддерживаются. RAID-0 не имеет избыточности, поэтому, когда диск умирает, массив идет вместе с ним.

Запустив mdadm, вы инициализировали суперблоки и запустили устройство рейда. Загляните в /proc /mdstat, чтобы увидеть, что происходит. Вы должны увидеть, что ваше устройство сейчас работает.

/dev /md0 теперь готов к форматированию, монтированию, использованию и злоупотреблению.

Я не думаю, что вы хотите RAID-0, так как в вашем случае каждая часть находится на одном диске, и это, вероятно, замедлит доступ с ненужными попытками чтения из каждой части в одно и то же время. Но, кажется, более полный ответ, чтобы включить его.

  • Также важно сохранить конфигурацию RAID с помощью команды ниже. Посмотрите на вывод (или в файле mdadm.conf), чтобы увидеть UUID RAID.

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

Некоторые другие полезные команды (см. man mdadm):

  • mdadm --query /dev/md0 - проверить устройство (массив или компонентное устройство, например, /dev /loop1), чтобы увидеть (1), является ли оно устройством md, и (2), если оно является компонентом массива md)
  • mdadm --examine /dev/loop1 - печатать содержимое метаданных, хранящихся на устройстве
  • mdadm --detail /dev/md0 - подробная информация о массиве, UUID
  • mdadm --stop /dev/md0 - остановить массив
  • mdadm --assemble --scan - собрать и запустить все массивы, перечисленные в стандартном конфигурационном файле (/etc/mdadm/mdadm.conf в Ubuntu, Debian? Если конфигурация сохранена как указано выше).
    • Также запустит все массивы в /etc/mdadm/mdadm.conf
  • mdadm --scan --assemble --uuid=a26bf396:31389f83:0df1722d:f404fe4c - собрать только массив с заданным UUID.
  • mdadm --assemble /dev/md0 /dev/loop1 /dev/loop2 [all devices] - собрать и запустить трудный путь

LVM тоже может работать, но из чтения https://www.centos.org/docs/5/html/Cluster_Logical_Volume_Manager/index.html и http://linoxide.com/linux-how-to/lvm-configuration-linux/ и man lvm это может быть не так просто, как RAID выше. По-видимому (?) Команды lvm, похоже, смотрят на каждое устройство, подключенное к вашему компьютеру, поэтому я вижу возможность ошибочного подключения не тех устройств ... Возможно, где-то есть команда, чтобы обойти это ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .