Подключение USB flash к роутеру, перенос корня на flash
Подготовить USB flash можно на компьютере с linux или на самом роутере. Если работы будут проводится на роутере, то сначала необходимо установить пакет fdisk:
opkg update opkg install fdisk
Приступим. Создаем на flash два раздела: первый раздел для overlay-я корня, второй для swap.
Запускаем fdisk и начинаем работать с нашей flash (не перепутайте с другими дисками!)
# fdisk /dev/sdb
Удаляем существующие разделы (в моем примере их было два):
Команда (m для справки): d Номер раздела (1-4): 1 Команда (m для справки): d Выбранный раздел 2
Создаем раздел данных размером 200 мегабайт (вы можете выделить все свободное пространство минус 50 мегабайт под swap):
Команда (m для справки): n Partition type: p primary (0 primary, 0 extended, 4 free) e расширенный Select (default p): Using default response p Номер раздела (1-4, по умолчанию 1): Используется значение по умолчанию 1 Первый сектор (2048-15435775, по умолчанию 2048): Используется значение по умолчанию 2048 Last сектор, +секторы or +size{K,M,G} (2048-15435775, по умолчанию 15435775): +200M
Создаем раздел swap размером 50 мегабайт (больше выделять смысла большого нет):
Команда (m для справки): n Partition type: p primary (1 primary, 0 extended, 3 free) e расширенный Select (default p): Using default response p Номер раздела (1-4, по умолчанию 2): Используется значение по умолчанию 2 Первый сектор (411648-15435775, по умолчанию 411648): Используется значение по умолчанию 411648 Last сектор, +секторы or +size{K,M,G} (411648-15435775, по умолчанию 15435775): +50M
Сохраняем изменения:
Команда (m для справки): w Таблица разделов была изменена! Вызывается ioctl() для перечитывания таблицы разделов. Синхронизируются диски.
Форматируем первый раздел:
# mkfs.ext4 /dev/sdb sdb sdb1 sdb2 root@leon-netbook:~/Загрузки# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (4-Feb-2014) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 51200 inodes, 204800 blocks 10240 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67371008 25 block groups 8192 blocks per group, 8192 fragments per group 2048 inod'ов в группе Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Сохранение таблицы inod'ов: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
Теперь flash диск можно подключить к роутеру начать настраивать роутер.
Устанавливаем необходимые пакеты:
# opkg update # opkg install block-mount kmod-fs-ext4 kmod-usb-core kmod-usb-storage
Перезагружаем роутер:
reboot
Определяем разделы /etc/config/fstab:
# block detect > /etc/config/fstab
Настраиваем монтирование корневого раздела и проверку файловой системы при запуске. ```/etc/config/fstab``` должен иметь такой вид:
config 'global' option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '10' option check_fs '1' config 'mount' option target '/overlay' option uuid '8f59bbe1-80e7-478c-bb0f-453e6c405975' option enabled '1 config swap option enabled '1' option device '/dev/sda2'
Монтируем раздел на flash и копируем overlay на раздел внешнего носителя:
mkdir /mnt/sda1 mount /dev/sda1 /mnt/sda1 tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf - umount /mnt/sda1/
Перезагружаемся и проверяем размер свободного пространства в корне:
# df -h Filesystem Size Used Available Use% Mounted on rootfs 189.7M 2.9M 172.8M 2% / /dev/root 2.0M 2.0M 0 100% /rom tmpfs 14.1M 68.0K 14.0M 0% /tmp /dev/sda1 189.7M 2.9M 172.8M 2% /overlay overlayfs:/overlay 189.7M 2.9M 172.8M 2% / tmpfs 512.0K 0 512.0K 0% /dev
Видим, что /dev/sda1 смонтирован в overlay, и свободного места в корне стало значительно больше.
Теперь перенесем /var в постоянное хранилище. По умолчанию каталог /var не сохраняется при перезагрузке. Мы эти данные будем сохранять:
mv /var /var-old mkdir /var cp -r /var-old/* /var rm /var-old
Создаем swap:
opkg install swap-utils mkswap /dev/sda2
Для вступления в силу изменений, следует еще раз перезагрузить роутер.