Я недавно купил флешку, которую собираюсь использовать исключительно для разделов подкачки. Я понимаю, что файлы подкачки на флэш-носителе, скорее всего, довольно быстро израсходуют количество циклов записи, но именно поэтому я купил этот USB, поэтому мне не приходится сталкиваться с такой деградацией на устройстве хранения данных моего ноутбука (eMMC), У меня есть две идеи о том, как я могу использовать это для пространства подкачки.
Схема 1: один раздел файловой системы и множество небольших разделов подкачки
USB-накопитель был объявлен емкостью 32 гигабайта, где гигабайт определен как 1000000000
байт, но фактическая доступная емкость дисконтирования форматирования файловой системы составляет 307520000000
байт (кроме того, здесь все еще присутствует некоторая ложная реклама).
Что я хочу сделать с этим диском, так это отформатировать его с таблицей разделов GUID и создать на нем несколько разделов, причем один раздел будет больше других и отформатирован с помощью базовой файловой системы (например, VFAT/FAT32, ext2, ext4). Общее количество разделов будет, по крайней мере, исчисляться сотнями, и, если не учитывать больший раздел файловой системы, они будут одинакового размера и будут использоваться для подкачки / подкачки пространства. Раздел файловой системы будет использоваться для хранения данных для управления этой конкретной схемой.
Причиной использования здесь множества небольших разделов вместо одного раздела или файла подкачки в файловой системе является предотвращение разброса поврежденных блоков по USB-накопителю; это облегчит управление деградацией, так как любые разделы, содержащие поврежденные блоки, больше не будут использоваться. Записи о том, какие разделы непригодны для использования, будут храниться в файловой системе, которая будет находиться на одном более крупном разделе.
Линейная цель Device Mapper будет использоваться для создания одного большого устройства из любого количества маленьких разделов на USB. Определение того, какие разделы использовать для создания подключенного устройства, будет производиться на основе данных, записанных в разделе файловой системы. Если я выберу зашифрованное устройство подкачки, я сохраню зашифрованный ключ в разделе файловой системы (или, возможно, вместо этого на главном компьютере).
Возвращаясь к вопросу о том, как я разделю USB-накопитель, 30752000000
байт необработанного пространства хранения преобразуются в 60062500
секторов, каждый из которых имеет размер 512
байт. Использование схемы GPT означает, что будут две области, по одной на каждом конце пространства хранения диска, которые не будут доступны для использования в качестве части файловой системы или для области подкачки. Учитывая практику выравнивания разделов по границам N
секторов, эти две области будут больше, чем размер таблицы разделов, которую я буду использовать (количество записей разделов, содержащихся в GPT, настраивается и максимально равно 4294967295
).
Такие инструменты, как fdisk
и gdisk
умолчанию устанавливают границы выравнивания по 2048
секторам , что, по-видимому, предполагает, что 2048 рекомендуется или в некотором роде оптимален. Если я выравнивать свои границы разбиения 2048
секторов, то , что оставляет один сегмент 2048
-сектора , содержащий первичный GPT в начале диска, один частичный сегмент 804 сектора , содержащий резервную копию GPT в конце диска, и 29326
2048
- сегменты секторов, доступные для файловой системы / разделов подкачки между ними.
При выравнивании разделов по границам 2048
секторов, если раздел файловой системы имеет размер X
количества сегментов, то общее число секторов, оставленных для использования в качестве нескольких разделов подкачки, Y
, равно 29326-X
. Теперь, так как я хочу, чтобы разделы подкачки были равны по размеру, значение Y
должно быть составным числом, и поскольку большее количество разделов может привести к тому, что таблица разделов будет иметь размер, превышающий 2046
секторов, количество разделов подкачки должно быть один из самых больших факторов Y
Обобщая вышесказанное, я получаю эту математику:
30752000000
- размер USB-накопителя в байтах.60062500
- это размер USB-накопителя в512
байтных секторах.p
- количество разделов, которые я буду использовать.P
- размер таблицы разделов в количестве записей. Это значение является частью заголовка GPT.q
- размер основного GPT в512
байтовых секторах. Это значение равноceiling(P/4)+2
.r
- размер резервного GPT в512
байтовых секторах. Это значение равноceiling(P/4)+1
.N
- количество секторов, по которым выровнены разделы.Q
- это число512
байтовых секторов в начале диска, которые не могут быть частью какого-либо раздела. Это значение равноN
R
- это число512
байтовых секторов на конце диска, которые не могут быть частью какого-либо раздела. Это значение равно60062500 mod N
X
- количествоN
секторных сегментов, которые можно использовать для разделов.Y
- размер раздела файловой системы в сегментахN
сектора.Z
- количествоN
секторных сегментов, доступных для использования в качестве частей разделов подкачки. Это значение равноX-Y
.S
- количество разделов подкачки, которые я буду использовать.Z
должен делиться наS
p
не может превышатьP
.r
не может превышатьN
Мои вопросы по этой схеме:+ Имеет ли значение выравнивание разделов?
+ Если это так, то я должен выровнять свои разделы по границам 2048
секторов или это должно быть какое-то другое число?
+ Есть ли номер, который я могу выбрать для N
который будет равномерно делить 60062500
. Если есть, приводит ли это к какому-либо перекрытию данных? Если это число не является степенью двойки, то будет ли это неоптимальным выбором?
Схема 2: Один раздел файловой системы и один больший раздел LVM2 PV
Эта идея очень похожа на первую, но отличие состоит в том, что многие меньшие разделы подкачки будут заменены большими разделами, отформатированными для использования в качестве физического тома с LVM2. Большой раздел будет сегментирован на множество логических томов, размер которых можно изменить и при необходимости перекомбинировать. Файловая система будет служить той же цели, что и в первой схеме.
Я вижу несколько возможных проблем с этим:+ Я не знаю, работает ли LVM2 как файловая система и перемещает ли данные, содержащие логические тома, как данные, которые содержат файлы в файловой системе. Если это произойдет, то это будет проблематично для изоляции плохих блоков, что является требованием для этой схемы, как и в первой. + Я не знаю, будет ли изменение размера и объединение логических томов иметь проблему, аналогичную той, которая была выдвинута в предыдущем пункте. + Это может быть излишне сложнее, чем первая идея, но я не могу сказать, если это так или нет.
В заключение…
Какую схему мне использовать? Каковы ответы на вопросы / проблемы, поставленные под каждым? Могу ли я в любом случае использовать шифрование для пространства подкачки, и будет ли от него (шифрования) легко избавиться, когда он мне не нужен? Может ли сжатая память подкачки, например zram
уменьшить количество поврежденных блоков? Если да, то как мне его использовать? Как определить размер основного блока USB-накопителя? Кажется, hdparm
не помогает в этом.