Схема подкачки на USB

Я недавно купил флешку, которую собираюсь использовать исключительно для разделов подкачки. Я понимаю, что файлы подкачки на флэш-носителе, скорее всего, довольно быстро израсходуют количество циклов записи, но именно поэтому я купил этот USB, поэтому мне не приходится сталкиваться с такой деградацией на устройстве хранения данных моего ноутбука (eMMC), У меня есть две идеи о том, как я могу использовать это для пространства подкачки.

Схема 1: один раздел файловой системы и множество небольших разделов подкачки

Было объявлено, что USB-накопитель имеет емкость 32 гигабайта, где гигабайт определяется как 1000000000 байт, но фактическая доступная емкость дисконтирования форматирования файловой системы 307520000000 байт (кроме этого, здесь все еще присутствует некоторая ложная реклама).

Что я хочу сделать с этим диском, так это отформатировать его с помощью таблицы разделов GUID и создать на нем несколько разделов, причем один раздел будет больше других и отформатирован с помощью базовой файловой системы (например, VFAT/FAT32, ext2, ext4). Общее количество разделов будет, по крайней мере, исчисляться сотнями, и, если не учитывать больший раздел файловой системы, они будут одинакового размера и будут использоваться для подкачки / подкачки пространства. Раздел файловой системы будет использоваться для хранения данных для управления этой конкретной схемой.

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

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

Возвращаясь к вопросу о том, как я буду 30752000000 байты необработанного пространства хранения переводятся в 60062500 сектора, которые каждый 512 размер в байтах. Использование схемы GPT означает, что будет две области, по одной на каждом конце дискового пространства, которые не будут доступны для использования в качестве части файловой системы или для области подкачки. Учитывая практику выравнивания разделов N-секторных границ, эти две области будут больше, чем размер таблицы разделов, которую я буду использовать (количество записей разделов, содержащихся в GPT, регулируется и максимально 4294967295).

Инструменты как fdisk а также gdisk по умолчанию 2048границы выравнивания по секторам, что, по-видимому, говорит о том, что 2048 рекомендуется или является в некотором роде оптимальным. Если я выровняю границы раздела 2048 секторы, то это оставляет один 2048-секторный сегмент, содержащий основной GPT в начале диска, один частичный сегмент 804-сектора, содержащий резервный GPT в конце диска, и 293262048-секторные сегменты, доступные для файловой системы / разделов подкачки между ними.

Сохранение с выравниванием раздела 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 кажется, не поможет с этим.

2 ответа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Извините за поздний ответ, но в случае невозможности добавить больше оперативной памяти я использовал ZRAM . Я сделал следующие шаги:

      #to activate zram module:
modprobe zram 
#Assign 512Mb to the zram virtual space:
zramctl --size 512M /dev/zram0
#Now, make the zram device as a swap device:
mkswap /dev/zram0
#Enable swap memory
swapon /dev/zram0

Рекомендуется установить подкачку как можно ниже; используйте его только тогда, когда шток полностью (или очень близко к нему). Это команда для этого:

      sysctl vm.swappiness=1

Теперь проверьте, что изменения применяются успешно:

      cat /proc/sys/vm/swappiness

Должно вернуться 1. Примечание. При перезагрузке все изменения будут сброшены. чтобы он постоянно видел этот пост от proxmox. Отсюда я взял информацию и применил ее к своему серверу.

Другие вопросы по тегам