Как ограничить количество полос данных в профиле btrfs RAID -0, чтобы лучше использовать доступное пространство?

Простой скрипт Python

#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
    for line in f:
        tokens=line.strip().split('_')
        print(",".join(tokens[0:3]),'_',tokens[3],sep='')

Основная идея заключается в том, что мы читаем файл построчно, разбиваем его на части по разделителю _и соединяем первые 3 элемента с _в строку, используя нотацию среза [0:3]. Если вам нужно сохранить этот вывод в виде файла, используйте оператор оболочки >и отправьте вывод в файл.

Испытание:

$./edit_lines.py input.txt                                                                                                                                                             
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
2
14.10.2020, 16:22
1 ответ

Вы не можете сделать это из коробки, но это может быть возможно, если повезет и приложите усилия.

Дело в том, что на данный момент (в btrfs -progs 5.7 )нет способа передать настраиваемое минимальное/максимальное количество полос в mkfs.btrfs. Онлайн-калькулятор пространства также содержит примечание на этот счет в разделе Предустановленные уровни RAID :

.

Note that these are the only parameter settings supported by btrfs at present.

Я пробовал различные комбинации mkfs.btrfsс двумя дисками, btrfs device addс третьим диском иbtrfs balance(с использованием LV 8+4+4 ГиБ в качестве «дисков» ). К сожалению, хотя мне часто удавалось хранить более 12 ГиБ данных на ФС, я никогда не приближался к желаемым 16 ГиБ. Согласно btrfs device usage, я всегда получаю некоторое сочетание фрагментов, чередующихся на 2 и 3 дисках.

Тем не менее, может быть возможно использовать пользовательский счетчик полос в mkfs.btrfsпутем изменения кода. Макет чанка настраивается в btrfs_alloc_chunk()в volume.cв программах btrfs -. Эта функция вызывает init_alloc_chunk_ctl()для преобразования предустановки RAID в количество полос. min_stripesустанавливается равным 2 для RAID0, а num_stripes(, который представляет собой количество полос, фактически используемых для создания фрагмента, )устанавливается равным min(ctl->max_stripes, ctl->total_devs). Здесь max_stripesявляется зависимым пределом -типа -блока, установленным в btrfs_alloc_chunk().

Таким образом, вы можете модифицировать эту подпрограмму, зафиксировав num_stripesдо нужного значения (2 )и использовать такое модифицированное mkfs.btrfsдля создания файловой системы, которая ведет себя так, как вы хотите. У меня нет времени тщательно проверять эту гипотезу, поэтому есть некоторый шанс, что вы столкнетесь с ошибками в ядре или программах btrfs -, но ИМХО у нее есть все шансы сработать. В конце концов, разметка диска -, которую вы ищете, все еще часто возникает, когда вы используете немодифицированные инструменты и добавляете/удаляете устройства (, как в моих тестах выше ), поэтому в принципе она должна поддерживаться. Но я не слишком удивлюсь, если более поздние device add/balanceснова испортят раскладку.

3
18.03.2021, 22:57

Теги

Похожие вопросы