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

531
Melab

Я недавно купил флешку, которую собираюсь использовать исключительно для разделов подкачки. Я понимаю, что файлы подкачки на флэш-носителе, скорее всего, довольно быстро израсходуют количество циклов записи, но именно поэтому я купил этот 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
Лучший способ избежать ношения вашего подкачки - это иметь достаточно оперативной памяти и низкий уровень «перестановки». Помещение вашего своп-накопителя на сравнительно медленное USB-соединение не выглядит хорошим решением. Устройства SSD имеют резервные сектора, которые прозрачно переназначаются для замены поврежденных секторов. Когда вы начинаете видеть поврежденные сектора, это означает, что резервные сектора исчерпаны, и в этот момент все довольно быстро портится, и вам следует заменить устройство. OTOH последние устройства изнашиваются довольно медленно. xenoid 7 лет назад 0
@xenoid Я понимаю, что наличие большего объема оперативной памяти облегчит проблему, но это не было частью вопроса. Моя RAM не может быть расширена. Melab 7 лет назад 0

1 ответ на вопрос

1
dirkt

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Лучший способ сделать это - установить достаточное количество оперативной памяти и полностью отключить подкачку». Это Chromebook, поэтому это невозможно. Пожалуйста, ответьте на вопросы, а не предлагайте эту альтернативу. Melab 7 лет назад 0
`Это не имеет смысла: не имеет значения, где находится блок, доступ ко всем блокам может быть одинаково быстрым (или медленным). Микроконтроллер на USB-накопителе все равно переназначит поврежденные блоки или будет использовать выравнивание износа и перемещать блоки по своему усмотрению. Итак, если я отформатирую все это как раздел подкачки, используйте его некоторое время, а затем уменьшите его размер, а затем отформатировать файловую систему на оставшееся место, файловая система не будет затронуто? Melab 7 лет назад 0
(1) Если вы не можете установить ОЗУ, посмотрите, достаточно ли доступной ОЗУ, затем отключите своп. И вы не упомянули, что это за устройство. (2) В стиках используется выравнивание износа, поэтому в среднем каждый блок будет записываться одинаковое количество раз, независимо от того, находится ли он в разделе подкачки или в файловой системе. Вы не можете обойти это, потому что вы не можете переопределить микроконтроллер. Таким образом, FS * будет * затронут (некоторые блоки уже были записаны несколько раз), но это будет затронуто независимо от того, что вы делаете. dirkt 7 лет назад 0
(1) Недостаточно оперативной памяти. (2) Что вы имеете в виду, что файловая система будет затронута? Если я использую только разделы подкачки и не касаюсь раздела файловой системы, то почему контроллер USB даже касается файловой системы? Если то, что вы говорите, правда, то мы должны ожидать, что нетронутые разделы файловой системы будут изменены прошивкой USB. Melab 7 лет назад 0
Перестановка является опцией, если 1) она используется очень легко (в основном, чтобы избежать ошибок нехватки памяти) или 2) она используется на устройстве с очень быстрым вводом-выводом. Постоянное подключение системы к USB-устройству не будет работать. xenoid 7 лет назад 0
* Что вы имеете в виду, что файловая система будет затронута? * Потому что прошивка устройства не видит ваш раздел. Для него все сектора равны, и он отображает реальные сектора на виртуальные сектора, которые являются единственной вещью, которую видит ваша ОС. Таким образом, ваша ОС разделяет виртуальные сектора, и они могут быть прозрачно переназначены. xenoid 7 лет назад 0
Что такое "таблицы ОС"? Melab 7 лет назад 0
Сопоставление адреса внутренней оперативной памяти с адресом подкачки и т. Д. dirkt 7 лет назад 0

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