Довольно часто возникает желание или необходимость поставить Ubuntu на USB флешку и получить возможность пользоваться своей любимой ОС на любом компьютере (лишь бы была возможность загрузится с USB). Делается это просто - грузимся с LiveCD Ubuntu (или с LiveUSB) и ставим систему на флешку. При этом нам не важно какая ос установлена на компьютере. Все что нужно это сам компьютер, LiveCD/USB и флешка (на которую будем ставить Ubuntu).
- Как вариант - можно в качестве компьютера использовать эмулятор: VirtualBox или VmWare, только в них бывает сложно подключить USB для установки Ubuntu, тогда как LiveCD не надо записывать - можно просто подключить образ в виртуальный привод CD-rom.
- И часто подход к этому вопросу, что называется, «в-лоб» разочаровывает низкой производительностью и тем, что флешка быстро умирает.
- Многие смогут возразить, что имея такую флешку с установленной ОС они ей пользуются много месяцев или даже лет. Если уточнить, то выясняется, что пользуются то ей долго, а вот грузятся с нее редко и работают не подолгу. Если же работать с такой флешки ежедневно, по много часов, то «смерть» флешки не заставит себя долго ждать: 2-3 месяца, может больше, может меньше, зависит от флешки (из личного опыта создателя начальной версии этой статьи Sly_tom_cat).
- Кроме того и сам процесс установки порой приводит к неприятным последствиям.
- Но не надо отчаиваться и опускать руки…. Даже из не очень хорошего сырья можно сделать…, если не конфетку, то, по крайней мере, что-то съедобное Разберемся в причинах печального исхода и возможных методов улучшения ситуации.
Основные ошибки при установке Ubuntu на USB флешку и как с ними бороться
По умолчанию установщик Ubuntu предлагает журналируемую файловую систему EXT4 для создаваемых разделов данных. Кроме того, загрузчик (GRUB) по умолчанию ставится на первый диск в системе, как правило, - это встроенный HDD компьютера. Установщик Ubuntu, довольно настойчиво, просит создать раздел подкачки (если вы его не создаете, то получите сообщение и должны будете подтвердить свое желание установить систему без swap-раздела). Приняв эти умолчания, мы сразу создаем две проблемы.
- На флешке создаются разделы с файловой системой, которая при работе будет осуществлять большое количество записей на флешку (чем сократит ее время жизни). Это касается и разделов EXT4 и swap-раздела.
- Загрузчик установится так, что без флешки ваш компьютер не сможет загрузится.
Разберем подробнее эти две проблемы
Как продлить жизнь флешке?
- Флеш-память отличается от жестких дисков тем, что количество циклов записи ограничено типично числами 10 и 100 тысяч записей (для разных типов флеш-памяти).
- Для жестких дисков такой параметр (число циклов записи) вообще почти никогда не указывается - там быстрее происходит механический износ элементов диска. А магнитный слой на поверхности диска может перезаписываться почти бесконечно.
- Схемы памяти с выдерживающие до 10 тысяч записей стоят гораздо дешевле схем выдерживающих 100 тысяч… как вы думаете - какими схемами комплектуются недорогие флешки, нашедшие широкое распространение? Но и высокая цена флешки тоже не говорит о повышенной живучести - тут ключевое слово - тип памяти - MLC (Multi-level cell, многоуровневые ячейки памяти) выдерживает порядка 10 тысяч записей; SLC (Single-level cell, одноуровневые ячейки памяти) — более 100 тысяч. Более дорогие флешки действительно живут дольше, но достигается это другими средствами (о них - чуть позже)
Кажется это много, но разберемся как эти циклы записи «съедаются» при работе ОС.
- Запись на флеш-носитель происходит по-блочно (как правило - десятки килобайт), и запись последовательно двух байт в файл с интервалом между записями в несколько минут вызовет две записи одного и того же блока памяти (т.е. обновятся два раза несколько тысяч ячеек).
- При работе файловой системы (ФС) некоторые служебные структуры ФС обновляются постоянно:
- журнал (для журналируемых ФС) - чем чаще он пишется, тем выше вероятность сохранения целостности ФС при сбоях системы или питания. Частота записи в журнал, как правило изменяема, но значения по умолчанию не совсем подходят для работы с флеш-памятью, а увеличение периодов между записью - приводит к увеличению вероятности потери целостности ФС при сбое.
- i-node (специальная структура в которой сохраняется заголовок файла или каталога) - при каждом обращении (даже чтение) к файлу или каталогу в i-node прописывается дата/время последнего обращения. Казалось бы - всего несколько байт, но вспомним про блочную запись, и том, что запись их идет при каждом обращении к файлу (прочитали байт - изменились, еще байт - опять изменилось).
- Временные файлы и логи - так же часто обновляются.
- SWAP-раздел - если он используется в работе системы, то запись в него тоже очень интенсивная.
Кроме того, нужно не забывать, что лимит циклов записи действует на каждую ячейку памяти. И если на флешке в один и тот же блок сделать 10 тысяч записей, а в другие сделать по 100 записей, то блок, куда было записано 10 тысяч раз, на записи (10-тысяч + сколько-то) «умрет», а контроллер флешки, обнаружив 1 битый блок, может заявить, что умерла вся флешка. А даже если он этого не сделает, то этот блок будет содержать важную для работы системы или ФС информацию, и результат будет практически тем же - внезапная остановка системы и невозможность прочитать данные с флешки.
Как бороться со всем этим? Для начала поймем и примем как данность:
- Флешки не вечны и умирают не предупреждая !
Осознав это поймем, что и cистема на флешке - не может быть долговечной и надежной
- А поняв и приняв это задумаемся - а нужна ли для такой системы надежность журналируемой ФС (такой дорогой ценой как сокращениевремени жизни флешки и системы на ней)? Однозначно - нет. Нам потребуется EXT4 с отключенным журналом. Если разбираться с отключением журнал в EXT3/4 не хотите - просто воспользуйтесь EXT2.
- Есть и другие ФС, и настройки, которые могут продлить жизнь флешке. Эти решения могут дать большие преимущества. Если есть желание - то поищите другие варианты. Особо обращает на себя внимание опция ssd файловой системы btrfs…
- Избавится от записи даты/времени последнего доступа к файлам и директориям в i-node помогают опции монтирования файловых систем noatime и nodiratime. Их, после установки системы, нужно будет прописать в файле /etc/fstab для всех разделов системы, которые расположены на флешке.
Вообще, эти опции не только количество записей на флешке сокращают, но и на жестком диске скорость работы ФС увеличивают.
- Временные файлы и swap. Современные компьютеры редко страдают недостатком оперативной памяти (перелом в этом отношениислучился в компьютерной индустрии после значительного удешевления схем памяти). И уже при 1ГБ оперативной памяти Linux довольно редко обращается к swap, если не запускать ресурсоёмкие задачи (например кодирование высококачественного видео или редактирование огромных изображений). Если памяти 2ГБ или больше, то заставить Linux использовать swap вообще довольно сложно.
- Полное отсутствие swap грозит неадекватным поведением системы при исчерпании ресурсов оперативной памяти, но вспомним, что мы с вами осознали - система на USB флешке не может быть надежной по определению. Вывод напрашивается сам собой - swap для системы на флешке - не нужен. А на компьютерах с малым объемом памяти нужно быть осторожным и стараться не запускать много приложений одновременно. Можно так же настроить ramzswap (он же - compcache): своп в оперативную память с упаковкой свопируемых станиц.
Ресурсы оперативной памяти помогут и со временными файлами - достаточно смонтировать временный каталог системы /tmp в диск организованный в памяти. Для этого нам пригодится замечательная файловая система tmpfs (даже название говорит, что она хорошо подходит для /tmp).
В /etc/fstab нужно прописать строчку:
tmpfs /tmp tmpfs rw,size=32m 0 0
В примере максимальный размер /tmp задан как 32 Мегабайта. Размер можно задать другой, но если ограничения не задать, то «сдуревшее» приложение, которое будет писать бесконечно во временный файл, может подвесить вашу систему. Размер /tmp важно выбрать правильно т.к. в нем будут хранится самые разные вещи. Например видео с Youtube вы не сможете посмотреть до конца если файл с видео не влезет полностью в ваш /tmp.
Точно также стоит поступить и с /run (ранее известный как /var/run) и /var/lock (в этих каталогах хранится служебная информация актуальная только на время текущей сессии, объем - малюсенький, а вот обновления довольно регулярны). На них лимит размера можно не задавать. Можно пойти дальше и разместить в памяти и логи (/var/log), однако без логов на устройстве постоянного хранения данных (в нашем случае - на флешке) будет крайне трудно разобраться со сбоем системы, вызывающем перезагрузку (после перезагрузки - все что было в памяти - потеряется и логи будут «пустые» - только то, что туда запишется с момента загрузки системы). Лимит size для /var/log стоит задавать порядка 6-10Мб (для типичного десктоп варианта). Общий вид файла /etc/fstab будет примерно таким:
# /etc/fstab: static file system information.
# # Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda2 during installation UUID=57f10d10-de95-4d09-8e18-aaf1c42c3f36 / ext4 errors=remount-ro,noatime,nodiratime 0 1
# /home was on /dev/sda3 during installation UUID=7ecf4c7b-3474-4850-9da5-6e519e415937 /home ext4 noatime,nodiratime 0 2 tmpfs /tmp tmpfs rw,size=100m 0 0 tmpfs /run tmpfs rw 0 0 tmpfs /var/lock tmpfs rw 0 0 tmpfs /var/log tmpfs rw,size=10m 0 0
- В примере на флешке создан корень и отдельный /home. Если есть еще какие-то разделы с флешки - то им тоже прописываем noatime,nodiratime.
- Скорость записи на флешку - тоже «больное место» нашей системы, и сокращая число циклов записи на флеш мы не только продлим время ее жизни, но и скорость работы ОС улучшим.
Как правильно ставить GRUB
А тут все просто - загрузчик (GRUB) надо ставить на флешку. Если вы оставите предложенную установщиком установку (на первый жесткий диск в системе) то в MBR жесткого диска пропишется часть кода GRUB, который станет искать остальную часть своего кода на разделе, куда будет записан /boot при установке системы (т.е. на флешке). Вытащив флешку из компьютера вы не дадите коду GRUB-а на жестком диске найти свое продолжение.
И компьютер не сможет загрузить ОС. Восстановить работу GRUB - просто. Если же надо восстанавливать загрузчик Windows, то стоит поискать информацию по восстановлению загрузчика на любом профильном форме. Но лучше быть внимательным при установке, и не создавать себе лишнюю работу.
Подведем итоги
Если мы хотим пользоваться системой на флешке долго, и не получить разочарования от потери данных, то нужно делать так:
- тип ФС для разделов системы выбираем EXT4 с отключенным журналом (или на худой конец - EXT2).
- swap не создаем (а если на компьютере есть раздел swap - то говорим инсталятору - не использовать его).
- GRUB устанавливаем обязательно на флешку, где и создаем разделы для установки системы.
- прописываем в /etc/fstab опции noatim,nodiratime для всех разделов размещенных на флешке.
- прописываем в /etc/fstab монтирование /tmp, /run, /var/lock (и, возможно, /var/log) в tmpfs (не забываем про ограничение размера).
- При использовании системы нужно регулярно делать резервную копию важных данных на другой носитель (не забываем про невысокую надежность ОС на флешке и возможную внезапную кончину флеш-памяти).
- А при использовании на компьютере с небольшим объемом оперативной памяти (1Гб и менее) стараемся не запускать по много ресурсоёмких задач одновременно или изучаем и настраиваем ramzswap.
- Кроме указанного, можно применить и другие приемы оптимизации производительности системы (эти приемы выходят за рамки данной статьи, но их легко найти в Internet-е).
- А главное - никогда не забываем про вывод, к которому мы пришли в начале этой статьи. Повторю: ОС, установленная на флешку не может быть такой же надежной и долговечной как установленная на жесткий диск.
"Подводные камни"
Есть одна досадная ошибка инсталлятора (можно сказать особенность ), которая не позволяет установить Ubuntu на тот же физический диск с которого загрузился Live образ. Т.е. если вы захотите загрузившись с флешки на нее же и поставить Ubuntu (в другой раздел) - то вам это не удастся. Обойти эту «особенность» можно удалив «руками» запись о примонтированном разделе с флешки из /etc/mtab.
Альтернативы
- Внешний жесткий диск не страдает малым числом циклов записи, однако, операционная система, работая с диском по довольно медленному интерфейсу (обычно USB2. USB3 и e-SATA интерфейсы - значительно быстрее, но на момент написания статьи - еще не сильно распространены), также требует оптимизации. Тут пригодятся и noatime,nodiratime, тоже стоит подумать - а нужен ли swap, да и /tmp полезно также разместить в памяти. А вот логи размещать в памяти - не стоит. Ну, а кроме того, внешний диск - это совсем другой размер и вес , да и падения для этих устройств - опасны.
- Внешний SSD диск - довольно дорогое решение. Тоже не маленький, хотя и легче внешнего жесткого диска и падений - почти не боится (как и флешка). И там тоже есть ограничение по числу циклов записи, но контроллеры твердотельных дисков используют специальные алгоритмы переразмещения записываемых блоков с учетом знаний о том, сколько записей было сделано в каждый блок памяти. Эти алгоритмы значительно продлевают время жизни такого носителя информации.
Упрощенные алгоритмы переразмещения блоков используются и в некоторых (как правило - не самых дешёвых) флешках. Для их работы требуется как избыточное количество ячеек памяти, так и более быстрый и «умный» контроллер. Собственно «особый» контроллер и доп. (не доступная пользователю) память и повышают стоимость флешки… хотя, конечно основное повышение цены делают маркетологи, как обычно.
- Можно пойти и другим путем - сменить дистрибутив. Есть дистрибутивы специально «заточенные» на работу с флешки (неберусь тут перечислять их все - их легко найти). Ярким представителем таких дистрибутивов является Puppy Linux (русифицированные сборки - PuppyRus Linux). Дистрибутив этот собран минималистично и с использованием самых скромных (по размерам) программ. Это позволяет в процессе загрузки разместить всю файловую систему Linux в оперативной памяти. А в процессе выключения системы все изменения в ФС (произведенные за время работы) записываются однократно обратно на флешку. Изменения можно скинуть и в процессе работы, если есть опасения например в возможном внезапном отключении питания, ну или просто - что бы быть спокойным, что не потеряется ничего. А самое привлекательное для любителей Ubuntu в том, что есть сборки Puppy основанные на Ubuntu. Сайт проекта PuppyRus содержит много полезной информации и инструкций.
А в чем отличие от LiveUSB
- Собственно LiveUSB, созданная с файлом сохранения, по сути своей мало отличается от Ubuntu установленной на флешке. Вместе с тем, есть и ряд принципиальных различий.
- Коротенько, как устроена и работает LiveUSB: При создании LiveUSB в файловую систему флешки (FAT) копируется содержимое CD (или DVD), на флешку устанавливается простенький загрузчик syslinux, и в корне флешки создается специальный файл сохранения (внутри которого создается файловая система EXT2) - casper.rw
- Когда такая флешка загружается, то корень файловой системы монтируется «хитрым» способом: сначала как корень монтируется специальный файл с упакованной, доступной только для чтения файловой системой (SquashFS), а затем «поверх» него монтируется casper.rw в режиме запись/чтение. Получается, что все необходимые для работы системы файлы лежат в SquashFS, а новые и обновленные файлы - в casper.rw. При запросе к файлу сначала проверяется нет ли его в casper.rw, а потом он ищется в SquashFS, таким образом даже системные файл можно обновить и работать с новыми версиями.
Каталоги /tmp, /run, /var/lock на LiveUSB тоже монтируются в память (tmpfs)
Что же мы получаем применительно к интересующим нас аспектам: Запись на флешку идет примерно в таком же объеме и его не получится сократить (добавив noatime,nodiratime в опции монтирования в /etc/fstab) т.к. монтирование корня происходит на этапе инициализации ядра системы и в /etc/fstab Live системы просто нет монтирования корня. Производительность по записи (собственно это больное место мы особо и не рассматривали при разговоре об Ubuntu установленной на флешку) здесь будет еще похуже, запись идет в ФС EXT2, а она лежит в фале на ФС FAT.
Дополнительно, флешка всегда хранит один и тот же набор системных файлов в SquashFS и любые обновления системы будут занимать место в casper.rw, но не будут освобождать место в SquashFS и это может стать проблемой при небольшом объеме флешки. В «сухом остатке»- у LiveUSB нет особых преимуществ перед правильно установленной на флешку системой, а недостатки - присутствуют.