Дисклеймер

Внимание: в этом блоге могут описываться события, явления и факты при помощи ненормативной лексики.

Убедитесь, что Вы готовы к этому.


Показаны сообщения с ярлыком usb. Показать все сообщения
Показаны сообщения с ярлыком usb. Показать все сообщения

воскресенье, 27 ноября 2011 г.

Создание мультизагрузочной USB-флэшки с функцией хранилища файлов v.1.1

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

Понадобятся:
  1. сам носитель USB-flash
  2. дистрибутив GNU/Linux из которого и будем производить операции
  3. ntfsprogs, ntfs-3g, grub2
  4. iso-файлы ОС, которые будут загружаться с флэшки
Для начала присоединим к компьютеру флэшку. Если она уже в формате fat/ntfs (дабы и виндовые машины могли читать содержимое), или в ином, нужном Вам - всё в порядке. Иначе - придётся форматировать. В любом случае, все данные с носителя лучше скопировать до совершения каких-либо нижеописанных действий.
Приступим к форматированию (например, в ntfs):
mkfs.ntfs -f /dev/sdb1
Если команда не срабатывает (такое бывает в Kubuntu 13.04, например), то вместо mkfs.ntfs нужно использовать mkntfs. В остальном - без изменений.
В Вашем случае, раздел девайса может называться и sdc1, и sdd1 - будьте внимательны.
Затем можно установить метку раздела, дабы сразу было понятно, что это. Например, так:
ntfslabel -v /dev/sdb1 MultiBootUSB
После этого нужно примонтировать данный раздел.
Для начала необходимо создать директорию, куда будем монтировать. Например,
mkdir /media/MultiBootUSB
И после этого с чистой совестью можно монтировать:
mount /dev/sdb1 /media/MultiBootUSB/
Теперь установим загрузчик на носитель. Обратите внимание, поскольку ставим на носитель, а не на раздел носителя, то цифры 1 после sdb нет:
grub2-install --boot-directory=/media/MultiBootUSB/boot /dev/sdb
Важно:
  1. в некоторых дистрибутивах команда может вызываться как grub-install (без двойки). 
  2. в старых версиях grub вместо --boot-directory=/media/MultiBootUSB/boot надо было писать --root-directory=/media/MultiBootUSB/
Процедура может занять чуть более минуты. В результате этого мероприятия, на флэшке образовалась директория /boot, в которой grub сложил нужные ему (и нам) файлы.
Настало время определиться, где же будут лежать iso-образы, которые будут грузиться с флэшки. Мне представляется, что директория  /iso в корне флэшки - крайне подходящий вариант. Создаём такую любым удобным способом. В моём случае:
mkdir /media/MultiBootUSB/iso
и складываем в неё нужные нам iso-файлы. Я положу дистрибутив Ubuntu 14.04.

Осталось подготовить grub.cfg, отвечающий нашим нуждам. Открываем файл любым редактором, например, nano:
nano /media/MultiBootUSB/boot/grub/grub.cfg
И вписываем туда нужные параметры. В рассматриваемом случае это:

set default="0"

set timeout=5

menuentry "ubuntu-14.04-desktop-amd64" {
set isofile="/iso/ubuntu-14.04-desktop-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet splash noprompt --
initrd (loop)/casper/initrd.lz
}
Пункт меню для Ubuntu будет справедлив и для любой другой *buntu-системы и им подобных, нужно лишь поменять переменную isofile во второй строке на подходящий, ну и само название пункта - menuentry.

В итоге, мы имеем USB-flash носитель с установленным загрузчиком, двумя директориями /boot и /iso. Эти директории нужны для загрузки с флэшки. В остальное свободное место можно совершенно спокойно складывать разные файлы: полезные и не очень. Таким образом, если носитель воткнуть до старта системы, то при разрешённой в BIOS (*EFI) загрузке с USB будут грузиться положенные iso-файлы ОС, а если же флэшка вставлена во время работы системы, то она будет открываться как файловое хранилище. Просто и удобно ;)

P.S. 20.05.2014 заметка была существенно обновлена, чтобы отражать существующие реалии.