суббота, 21 марта 2015 г.

OpenWRT — Подключение USB-флешки или USB-диска

OpenWRT — Подключение USB-флешки или USB-диска

 

Подготовка прошивки OpenWRT к подключению USB-диска

Поддержка USB прошивкой OpenWRT

Для поддержки USB-накопителей Вам необходимо либо собрать прошивку с включением следующих пакетов
  • kmod-usb-core
  • kmod-usb-ohci
  • kmod-usb-storage
  • kmod-usb2
либо доустановить их отдельно.

Установка производится через веб-интерфейс на странице Система-Программное обеспечение, либо классическим способом через терминал (telnet/SSH):
opkg update
opkg install kmod-usb-core
opkg install kmod-usb-ohci
opkg install kmod-usb-storage
opkg install kmod-usb2
Есть еще третий способ — запихать поддержку прямо в ядро прошивки, но это в большинстве случаев лишнее.

Поддержка файловых систем прошивкой OpenWRT

OpenWRT, в отличии от своего собрата DD-WRT в теории поддерживает все возможные файловые системы.
Для этого служат пакеты, например:
  • kmod-fs-ext4 — поддержка файловых систем ext2, ext3 и ext4
  • kmod-fs-vfat — поддержка файловой системы fat32
и еще парочка других, но менее востребованных.
Тут всё так же — либо через веб-интерфейс LuCI, либо через терминал, либо намертво запихать в ядро. Не буду углубляться — разберетесь на примере предыдущего пункта. всё так же.

Подготовка USB-флешки/диска

Если вы планируете использовать флешку как хранилище для файлов, то, в принципе, Вам подойдет любая файловая система. Однако будьте осторожны, в файловой системе Fat32 ограничение по максимальному размеру файла составляет около 4гб. Этого не всегда достаточно. У остальных перечисленных файловых систем это ограничение на несколько порядков выше, что уже не создаст проблем.
Если Вы планируете использовать накопитель как место для установки дополнительных пакетов (samba, например), то вы должны ограничиться списком ext2, ext3, ext4. На остальные системы программы просто не установятся.
Как разметить?
Основываясь на личном опыте предлагаю Вам следующую схему. Наиболее оптимальный вариант:
Раздел 1 / тип swap / размер 128 мб — раздел подкачки.
Раздел 2 / тип ext4 / размер 1 гб — раздел для установки пакетов.
Раздел 3 / тип ext4 / размер — вся оставшаяся область на диске — раздел для прочих файлов.

Разметка USB-флешки/диска в Linux

В OpenWRT есть проблема с монтированием дисков в некоторых случаях, когда они размечены не от имени пользователя root, по-этому используем sudo с флагом -i
Подключаем флешку/диск к компьютеру и приступаем к разметке и форматированию.
У меня флешка подключилась как /dev/sdf
sudo -i fdisk /dev/sdf
Запустившись fdisk просит Вас ввести команду. Последовательность команд примерно следующая.
  1. o — создаем новую таблицу разделов, удалив всё что было
  2. n — создаем первый раздел. тип primary — p, номер раздела — по умолчанию, первый сектор — по умолчанию, последний сектор смещен на 128мб — +128M
  3. n — создаем второй раздел. тип primary — p, номер раздела — по умолчанию, первый сектор — по умолчанию, последний сектор смещен на 1Гб — +1G
  4. n — создаем третий раздел. тип primary — p, номер раздела — по умолчанию, первый сектор — по умолчанию, последний сектор — по умолчанию
  5. w — сохраняем изменения

Создание файловых систем на USB-флешке/диске

Сначала завершим создание раздела подкачки:
sudo -i mkswap /dev/sdf1
Теперь создадим файловые системы ext4 на втором и третьем разделе на флешке:
sudo -i mkfs.ext2 /dev/sdf2
sudo -i mkfs.ext4 /dev/sdf3
Ждем завершение процедуры форматирования и подключаем USB-носитель к роутеру.

Подготовка OpenWRT к работе с USB-носителями

Для монтирования USB-флешек и USB-жестких дисков в OpenWRT необходимо выполнить три условия
  1. Поддержка USB устройств ядром
  2. Поддержка файловых систем ядром
  3. Установлен пакет block-mount
О первых двух пунктах было сказано в начале статьи. По поводу третьего — всё просто:
opkg update
opkg install block-mount

Монтирование USB-флешек/дисков в OpenWRT

Монтировать можно через WEB-интерфейс LuCI, однако это скучно, неинтересно и, на данный момент, не дает всех возможностей.
Дело в том, что с недавнего момента логика монтирования в overlay поменялась, а LuCI до сих пор поддерживает старый стандарт.
Я Вам поведаю о монтирование через терминал.
Итак, подключаемся к устройству через SSH или Telnet и приступаем.

Настройка fstab в OpenWRT

Настройки fstab в OpenWRT хранятся в файле /etc/config/fstab и, в отличии от десктопного Linux, придерживаются стандарта uci. Однако сложного в них ничего нет.
Чтобы не создавать файл с нуля — воспользуемся утилитой block detect
block detect >> /etc/config/fstab
Посмотрим, что у нас создалось по умолчанию:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'
config 'swap'
        option  device  '/dev/sda1'
        option  enabled '0'
config 'mount'
        option  target  '/mnt/sda2'
        option  uuid    '25f9a5d2-8743-4fe0-b91c-c1088887b637'
        option  enabled '0'
config 'mount'
        option  target  '/mnt/sda3'
        option  uuid    '7725b029-51ea-44e6-898f-2987e9b9bbd8'
        option  enabled '0'
Для начала включим автомонтирование swap-раздела на USB-HDD/USB-флешке.
Для этого в блоке global присвоим опции auto_swap значение 1.
А так же в блоке swap опции enabled значение 1.
1
2
3
4
5
6
config 'global'
        option  auto_swap       '1'
config 'swap'
        option  device  '/dev/sda1'
        option  enabled '1'
Далее настроим монтирование остальных разделов.
Второй раздел — в точку монтирования /overlay, для расширения памяти устройства для установки пакетов и прочих манипуляций.
Третий раздел — в точку монтирования /mnt/usb (вместо usb может быть что угодно, называйте как хотите), для хранения ваших файлов.
Для этого в файл fstab вносим следующие правки
1
2
3
4
5
6
7
8
9
10
11
12
13
config 'global'
        option  auto_mount      '1'
        option  delay_root      '5'
config 'mount'
        option  target  '/overlay'
        option  uuid    '25f9a5d2-8743-4fe0-b91c-c1088887b637'
        option  enabled '1'
config 'mount'
        option  target  '/mnt/usb'
        option  uuid    '7725b029-51ea-44e6-898f-2987e9b9bbd8'
        option  enabled '1'
Сохраняем файл, но пока перезагружаться рано. Надо подготовить overlay-раздел на флешке.

Подготовка overlay-раздела на USB-диске

Итак, мы будем использовать второй раздел на нашем USB-диске/флешке.
Для этого монтируем раздел во временный каталог
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
Переносим содержимое каталога /overlay на подготавливаемый раздел
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -
И теперь можем смело перезагружаться.
reboot

Проверка результатов работы fstab

Если вы настроили всё верно, то команда df -h должна выдать примерно следующие результаты
df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                  975.9M      1.4M    907.3M   0% /
/dev/root                 5.5M      5.5M         0 100% /rom
tmpfs                    14.4M    244.0K     14.2M   2% /tmp
/dev/sda2               975.9M      1.4M    907.3M   0% /overlay
overlayfs:/overlay      975.9M      1.4M    907.3M   0% /
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda3                 6.2G     14.4M      5.8G   0% /mnt/usb

 

3 комментария:

  1. На Вики естьстатьи на эту тему:
    https://openwrt.org/docs/guide-user/storage/usb-drives-quickstart
    Тут быстрый способ без объяснения: но он форматирует влешку удаляя всё и потом там ext4 файловая система что хорошо если вы на флешке хотите не просто файлы хранить а ещё и пакеты устанавливать но плохо что потом эту флешку не сможете из под Виндовс посмотреть.

    https://openwrt.org/docs/guide-user/storage/usb-drives
    Более полный туториал


    https://openwrt.org/docs/guide-user/services/nas/usb-storage-samba-webinterface
    продолжение с настройкой сетевой папки с содержимым флешки

    ОтветитьУдалить
  2. Вопрос по єтой строке:
    rootfs 975.9M 1.4M 907.3M 0%

    сколько не бился, у меня стоит
    rootfs 4,3M 4,3M 0 100%

    ОтветитьУдалить
    Ответы
    1. Мне помогло это:
      Настройка rootfs_data
      Подключитесь через ssh к устройству.
      Сконфигурируйте /etc/config/fstab для монтирования rootfs_data в другой каталог на тот случай, если вам понадобится получить доступ к исходному оверлею root для изменения настроек extroot:

      DEVICE="$(awk -e '/\s\/overlay\s/{print $1}' /etc/mtab)"
      uci -q delete fstab.rwm
      uci set fstab.rwm="mount"
      uci set fstab.rwm.device="${DEVICE}"
      uci set fstab.rwm.target="/rwm"
      uci commit fstab

      Каталог /rwm будет содержать исходный корневой overlay, который используется в качестве основного корневого overlay до тех пор, пока extroot не будет поднят и запущен. Позже вы можете отредактировать /rwm/upper/etc/config/fstab, чтобы изменить вашу конфигурацию extroot (или временно отключить ее), если вам это когда-либо понадобится.


      Настройка extroot
      block info

      DEVICE="/dev/sda2"
      eval $(block info "${DEVICE}" | grep -o -e "UUID=\S*")
      uci -q delete fstab.overlay
      uci set fstab.overlay="mount"
      uci set fstab.overlay.uuid="${UUID}"
      uci set fstab.overlay.target="/overlay"
      uci commit fstab


      Перенос данных
      mount /dev/sda2 /mnt
      cp -a -f /overlay/. /mnt
      umount /mnt

      Удалить