Вопрос или проблема
Я понимаю, что это звучит странно, но у меня есть несколько USB-накопителей на 64 ГБ, и мне нужно сохранить файл размером 100 ГБ, что превышает емкость одного USB-накопителя. Существует ли способ объединить эти два USB-накопителя в единый логический раздел, который будет выглядеть как один большой диск? Обратите внимание, что я использую Debian Linux вместо Windows. Я всегда буду работать с подключенными обоими USB-накопителями и не буду получать доступ к файлу, если подключен только один USB. Чтобы пояснить мой вопрос, позвольте мне привести пример. Например, у меня есть файл, содержащий следующие данные: 1234567890, и я хотел бы разбить файл на 12345 и 67890, если каждый USB-накопитель может хранить только 5 символов данных. Но файл доступен только в случае одновременного подключения 2 USB-накопителей.
То, чего вы хотите добиться, может быть выполнено с помощью разбивки архива на более мелкие части. Это зависит от того, нужен ли вам прямой доступ к вашему файлу на 100 ГБ или это исключительно для архивных целей. Если это последнее, этот подход может быть полезным. В этом примере я использую 7-Zip, чтобы создать tar-файл, разбитый на части по 100 МБ:
Это также работает для других форматов архивов, таких как zip или 7z. Здесь я разбил some_large_file.iso (1,04 ГБ) на части по 100 МБ:
В вашем случае вы бы разбили файл на единицы по 64 ГБ (64G). В зависимости от фактического размера USB-накопителей, возможно, вам придется немного уменьшить этот размер.
Если "логический раздел, который будет выглядеть как один большой диск" не является строгим требованием, вы можете использовать Btrfs. Сначала решите, хотите ли вы выделить целые USB-накопители для файловой системы, которую вы создадите, или хотите создать таблицу разделов на каждом из них. Последний метод более каноничен, первый метод проще. Большинство команд в этом ответе требуют доступа от имени root. Для краткости я не включаю sudo явным образом в команды. Используйте sudo, где это необходимо. Предположим, что устройства, которые вы хотите использовать, — это /dev/sdx и /dev/sdy. На всякий случай выполните команду wipefs -a /dev/sdx /dev/sdy, чтобы устройства выглядели чистыми. Если вы хотите использовать разделы, а не целые устройства, создайте один большой раздел на каждом устройстве (с помощью fdisk, gdisk или аналогичного инструмента). Если ваш инструмент предлагает создать новую файловую систему, откажитесь. Если инструмент находит старую подпись и спрашивает, следует ли ее удалить, подтвердите. После создания разделов (например, /dev/sdx1 и /dev/sdy1) на всякий случай снова выполните wipefs -a /dev/sdx1 /dev/sdy1, чтобы они выглядели чистыми и точно. Теперь создайте Btrfs на устройствах. Это будет либо mkfs.btrfs -d single -m dup /dev/sdx /dev/sdy, либо mkfs.btrfs -d single -m dup /dev/sdx1 /dev/sdy1, в зависимости от того, хотите ли вы использовать целые устройства или разделы. Это не создаст "логичекский раздел, который будет выглядеть как один большой диск"; я имею в виду, что на блочном уровне не появится ни одного /dev/чего-то, к чему вы можете получить доступ. Тем не менее, будет создана большая файловая система, готовая к монтированию. Чтобы смонтировать файловую систему, смонтируйте любое из её устройств, не важно какое. Если ядро знает, какие другие устройства принадлежат той же файловой системе, то оно их использует корректно. Если какое-либо из устройств отсутствует (фактически отсутствует или "не видится" ядром), то ядро не позволит вам смонтировать файловую систему. Сразу после создания файловой системы ядро должно знать об устройствах, и монтирование должно работать без проблем. После перезагрузки или после (повторного) подключения устройств к тому же или другому Linux, возможно, потребуется сначала выполнить btrfs device scan, чтобы ядро исследовало все устройства и узнало, где какая файловая система Btrfs. Нет вреда в выполнении btrfs device scan, даже если ядро уже знает; поэтому, если сомневаетесь, просто выполните его. Вот как выполняется монтирование: mount /dev/sd… /путь/к/точке/монтирования, где sd… – это одно из устройств, принадлежащих к файловой системе. В нашем примере это может быть sdx или sdy (если файловая система находится на этих целых устройствах), или sdx1 или sdy1 (если файловая система находится внутри этих разделов). Демонтируйте самым обычным образом: umount /путь/к/точке/монтирования.
Примечания:
Чтобы хранить еще более крупные файлы, вы можете использовать три или более устройства с mkfs.btrfs первой командой; или позже вы можете добавить устройство в Btrfs с помощью btrfs device add … (см. man 8 btrfs-device).
Вы можете использовать целые устройства, разделы и/или даже обычные файлы в качестве "устройств", выделенных для Btrfs. Вы можете смешивать эти типы. В случае обычных файлов, если вам нужно выполнить btrfs device scan, тогда вы также должны выполнить btrfs device scan /обычный/файл1 /обычный/файл2 …, потому что по умолчанию инструмент сканирует только блочные устройства, а не обычные файлы, поэтому вам нужно явно сообщить ядру о правильных обычных файлах для сканирования.
Комментарий, который говорит "USB-накопители известны как ненадежные, и вы удваиваете вероятность возникновения проблемы", в основном верен. Я даю вам способ сделать то, что вы хотите, потому что это возможно. Лично я бы использовал Btrfs на нескольких USB-накопителях только для краткосрочного (ад-хок) хранения данных, которые можно удалить без сожаления.
Используйте split, чтобы разделить файл: split -b 60G имя_файла
Даст вам filename01 и filename02. Чтобы восстановить оригинал, просто выполните cat filename01 filename02 > filename
Я обобщил ответы и комментарии, и у меня получилось 2 основных решения. Первое решение является наиболее безопасным, но оно несколько сложное, второе решение, однако, придерживается изначального вопроса: Решение 1: создание LVM логического тома на нескольких флешках Спасибо @GlennWillen за комментарий к ссылке и напоминание.
https://luppeng.wordpress.com/2023/10/01/создание-lvm-логического-тома-на-нескольких-usb-флешках/
Примечание: следующие шаги скопированы с веб-сайта
Шаг 1 – Создайте раздел на каждом из USB-накопителей. Перед началом убедитесь, что подключены все четыре USB $ sudo fdisk /dev/sdb
Добро пожаловать в fdisk (util-linux 2.37.2). Изменения сохранятся только в памяти, пока вы не решите записать их. Будьте осторожны, используя команду записи.
Команда (m для помощи): p Диск /dev/sdb: 1.87 GiB, 2002780160 байтов, 3911680 секторов Модель диска: Flash Disk Единицы: секторы по 1 * 512 = 512 байтов Размер сектора (логический/физический): 512 байтов / 512 байтов Размер ввода/вывода (минимальный/оптимальный): 512 байтов / 512 байтов Тип метки диска: dos Идентификатор диска: 0x6a5f5bac
Команда (m для помощи): n Тип раздела p основной (0 основных, 0 расширенных, 4 свободных) e расширенный (контейнер для логических разделов) Выберите (по умолчанию p): p Номер раздела (1-4, по умолчанию 1): Первый сектор (2048-3911679, по умолчанию 2048): Последний сектор, +/-секторы или +/-размер{K,M,G,T,P} (2048-3911679, по умолчанию 3911679):
Создан новый раздел 1 типа ‘Linux’ и размером 1.9 GiB.
Команда (m для помощи): p Диск /dev/sdb: 1.87 GiB, 2002780160 байтов, 3911680 секторов Модель диска: Flash Disk Единицы: секторы по 1 * 512 = 512 байтов Размер сектора (логический/физический): 512 байтов / 512 байтов Размер ввода/вывода (минимальный/оптимальный): 512 байтов / 512 байтов Тип метки диска: dos Идентификатор диска: 0x6a5f5bac
Устройство Загруз. Старт Конец Секторы Размер Id Тип /dev/sdb1 2048 3911679 3909632 1.9G 83 Linux
Команда (m для помощи): w Таблица разделов изменена. Вызываем ioctl() для повторного чтения таблицы разделов. Синхронизируем диски.
Шаг 2 – Создание физических томов LVM (PVs) После подготовки накопителей создадим PVs на USB-накопителях. Между PVs и разделами существует соответствие один к одному. Поскольку каждый USB-накопитель был настроен так, чтобы иметь один раздел, который охватывает весь диск, устройства с разделами (например, /dev/sdb1) появляться не будут. Затем мы создадим PVs на "чистом" устройстве: $ sudo pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde Физический том "/dev/sdb" успешно создан. Физический том "/dev/sdc" успешно создан. Физический том "/dev/sdd" успешно создан. Физический том "/dev/sde" успешно создан.
Шаг 3 – Создайте группу томов LVM (VG) с использованием PVs На этом этапе мы сгруппируем PVs в одну VG. Этот слой важен, поскольку он абстрагирует физические диски (представленные соответствующими им PVs), обеспечивая некоторые ключевые преимущества использования LVM, такие как изменение размера, добавление/удаление физических дисков во время использования тома. $ sudo vgcreate vg00 /dev/sdb /dev/sdc /dev/sdd /dev/sde Группа томов "vg00" успешно создана.
Шаг 4 – Создайте логический том LVM (LV) с использованием VG На последнем этапе LVM создадим логический том, который использует VG vg00, которую мы создали на предыдущем шаге: $ sudo lvcreate -n my_volume -l 100%FREE vg00 Логический том "lv01" создан.
Шаг 5 – Создайте файловую систему и смонтируйте её Логический том LVM ведет себя как блочное устройство — нам нужно установить файловую систему и смонтировать её, прежде чем мы сможем её использовать: $ sudo mkfs.ext4 /dev/mapper/vg00-lv01 $ sudo mount -t ext4 /dev/mapper/vg00-lv01 <ПУТЬ К ТОЧКЕ МОНТИРОВАНИЯ>
Решение 2: Разделите файл пополам и объедините его при использовании. Спасибо @vidarlo за ответ и предложение.
Используйте split, чтобы разделить файлы: split -b 60G имя_файла
Обратите внимание, что -b это размер байта на выходной файл. Это даст вам filename01 и filename02.
Чтобы восстановить оригинал, просто выполните: cat filename01 filename02 > имя_файла
Расширенное решение: Архивация папки и хранение ее по частям. Спасибо за ответ и предложение @velvet. Еще одно решение — использовать 7-zip для разделения архива на части и создания tar-файла. Используйте 7z для упаковки файла на куски по 100 Мбайт (или иными вами желаемыми).
Результат
Эквивалентом в Windows является JBOD, и поиск по "JBOD Linux" возвращает несколько возможных полезных результатов. Один из них — это пост на Ask Ubuntu, в котором предлагается использовать Fuse (ссылка на Fuse на связанного сайте) специально в качестве ответа на использование JBOD в Linux. Я не достаточно компетентен, чтобы валидировать этот ответ, но этот ответ был принят как пригодный для первоначального постера. Были и другие результаты, которые я не исследовал и оставляю как упражнение для читателя.
Если вам нужен только доступ только для чтения к файлу размером 100 ГБ и он в какой-то степени сжимаемый, вы можете попробовать запустить mksquashfs на нем, чтобы посмотреть, сожмется ли он достаточно, чтобы поместиться на одном диске. Если да, вы можете монтировать squashfs с флешки, где вам нужно его использовать. Ожидайте, что mksquashfs займет много времени.
Ответ или решение
Конечно, создание одного логического раздела, объединяющего две USB-флешки, является необычной, но выполнимой задачей в вашей ситуации. Это особенно актуально, если учесть, что вы используете Debian Linux. Давайте рассмотрим несколько решений, которые помогут вам достичь вашей цели.
Теория:
Что такое объединение дисков?
Объединение дисков предполагает совместное использование нескольких физических хранилищ данных, чтобы они выглядели как одно логическое устройство. В Linux можно добиться этого с помощью различных инструментов, таких как Btrfs и LVM (Logical Volume Manager). Эти технологии позволяют добавлять дополнительные устройства к одному каталогу, чтобы он воспринимался как одно большое пространство.
Возможные подходы:
-
Btrfs: Это современная файловая система, поддерживающая объединение нескольких устройств для создания одного файлового пространства. Btrfs идет дальше, чем простое объединение, предложив функциональные возможности, такие как автоматическая проверка целостности, мгновенные снимки и увеличение размера файловой системы.
-
LVM: LVM предоставляет более традиционный подход к управлению несколькими носителями данных в Linux. Он позволяет создавать логические тома, которые могут включать в себя несколько физических устройств. Это решение, вероятно, более подходит для вашего случая, поскольку позволяет легко расширять и управлять размером логических томов.
-
Сплит и concatenate файлы: Если вам не требуется постоянная запись и чтение единого файла размером 100 ГБ, а, например, только его временный доступ, вам подойдет способ деления файла на части и последующего склеивания перед использованием.
Пример:
1. Настройка с использованием Btrfs:
Вы можете использовать Btrfs для создания одномонтируемой файловой системы, которая будет использовать оба ваших USB-устройства. Для этого выполните следующие шаги:
-
Очистите устройства:
wipefs -a /dev/sdx /dev/sdy
-
Создайте Btrfs на устройствах:
mkfs.btrfs -d single -m dup /dev/sdx /dev/sdy
-
Подключите файловую систему:
mount /dev/sdx /mnt/usb_combined
2. Настройка с использованием LVM:
Использование LVM также позволяет создать единое пространство из нескольких устройств:
-
Создайте разделы на устройствах:
sudo fdisk /dev/sdx # Создайте раздел, повторите для /dev/sdy
-
Создайте физические тома:
sudo pvcreate /dev/sdx1 /dev/sdy1
-
Создайте группу томов:
sudo vgcreate vg_usb /dev/sdx1 /dev/sdy1
-
Создайте логический том:
sudo lvcreate -n my_volume -l 100%FREE vg_usb
-
Отформатируйте и подключите:
sudo mkfs.ext4 /dev/vg_usb/my_volume sudo mount /dev/vg_usb/my_volume /mnt/usb_combined
3. Разделение и объединение файлов:
Вы можете также использовать утилиту split
для разделения файла на несколько частей и последующего их объединения.
-
Разделите файл:
split -b 60G largefile
-
Восстановите файл когда необходимо:
cat largefile* > restoredfile
Применение:
Теперь, когда мы исследовали все возможные решения, вы можете выбрать то, которое наиболее соответствует вашим нуждам и ограничениям вашего оборудования. Если вам требуется доступ к файлу как к единому объекту, вам подходят Btrfs или LVM. Они идеально подходят для создания объединенного пространства, которое воспринимается как единый том. Однако если задача состоит лишь в кратковременном доступе к данным, проще и быстрее будет разбить файл на части.
Кроме того, следует помнить, что использование USB-накопителей в качестве долговременного хранилища может быть ненадежным в силу их недолговечности. Учитывайте это, когда решаете, какой метод использовать для долговременного хранения критически важных данных. Рассмотрите возможность использования жестких или твердотельных дисков для повышения надежности.