1

Я недавно купил флешку, которую собираюсь использовать исключительно для разделов подкачки. Я понимаю, что файлы подкачки на флэш-носителе, скорее всего, довольно быстро израсходуют количество циклов записи, но именно поэтому я купил этот 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 не помогает в этом.

1 ответ1

1

Я не хочу иметь дело с деградацией на устройстве хранения данных моего ноутбука (eMMC)

Лучший способ сделать это - установить достаточно оперативной памяти и полностью отключить своп.

Общее количество разделов будет по крайней мере в сотнях [...] Причиной использования здесь множества небольших разделов вместо одного раздела или файла подкачки в файловой системе является предотвращение разброса поврежденных блоков по USB-накопителю; это облегчит управление деградацией, так как любые разделы, содержащие поврежденные блоки, больше не будут использоваться.

Это не имеет смысла: не имеет значения, где находится блок, все блоки могут быть доступны одинаково быстро (или медленно). Микроконтроллер в USB-накопителе в любом случае переназначит поврежденные блоки или использует выравнивание износа и перемещает блоки так, как ему заблагорассудится.

Так что не делайте много маленьких перегородок. Создайте один раздел, достаточно большой для вашего предполагаемого использования памяти (сколько и каких программ вы используете в худшем случае?).

Использование lvm просто добавляет один уровень косвенности, который замедлит все.

Повторим: лучше всего установить достаточно оперативной памяти и полностью отключить своп.

Изменить: объяснение выравнивания износа

Микроконтроллер USB-накопителя реализует слой между реальными (физическими) блоками флешки и (логическими) блоками, доступными через USB.

Скажем, в целях иллюстрации палка претендует на некоторый стандартный размер, скажем, 150 логических блоков. Некоторые блоки всегда оказываются плохими после изготовления и помечаются в процессе производства. Скажем, палка была изготовлена из 200 блоков, из которых 20 плохие. Все по-прежнему нормально, теперь у вас есть 180 физических блоков, и это больше, чем 150 логических блоков, которые, как заявляет палка, есть.

Внутри флешка отслеживает соответствие между логическими и физическими блоками. Теперь предположим, что вы делаете раздел из (логического) блока от 0 до 49, и пишете каждый блок в этом разделе дважды. Первый раз флешка запишет физические блоки от 0 до 49, а во второй раз запишет физические блоки от 50 до 99. И так далее.

Поэтому, независимо от того, какую схему вы придумаете, вы не можете "сохранить" хорошие блоки для "позже". Это также было бы плохой идеей, потому что блоки становятся дефектными, когда транзисторы становятся негерметичными, и все упаковано очень плотно. Таким образом, плохой блок может также повлиять на соседние блоки и сделать их плохими, и если на флешке будет значительное количество плохих блоков, я бы не стал доверять ей важные данные.

Решения в порядке предпочтения:

1) Полностью отключите подкачку, используйте только доступную оперативную память. Время загрузки из USB-свопа в любом случае будет аналогично времени загрузки из внутреннего флэш-накопителя. Поэтому закройте те приложения, которые вы не используете, перезапустите их, если они вам понадобятся снова.

2) Если вам абсолютно необходимо использовать больше приложений, чем уместится в вашей оперативной памяти, или если вы хотите перевести компьютер в спящий режим, создайте один раздел разумного размера (который позволит сохранить таблицы ОС в приемлемом размере) и оставьте оставшуюся часть флешки. пустой.

Установите swappiness на "как можно ниже". При этом будут использованы все фискальные блоки на вашей флешке, а если через несколько лет она испортится, выбросьте ее и купите новую. Не пытайтесь хранить важные данные на нем, используйте другую палку для этого.

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