Установка OpenWrt на WD My Book Live Duo
Бонусом достался мне старенький NAS Western Digital My Book Live Duo. Как хранилище в домашней сети вполне годная штука, можно установить два диска до 4Tb каждый. Программная часть устройства оставляет желать лучшего, особенно после опыта использования TrueNAS, а т.к. поддержка производителем данных устройств закончилась где то в году 2016, то никаких обновлений ждать не стоит. В качестве альтернативы было решено попробовать ПО OpenWrt, для данных NAS делают отдельную сборку.
- Подготовка
- Запись OpenWrt на HDD
- Первое включение устройства
- Создание RAID массива для хранения данных
- Синхронизация загрузочного и системного разделов на случай отказа диска
- Установка и настройка общих сетевых папок
- Дополнительный полезный софт
- Заключение
Подготовка
Программная часть NAS хранится не на отдельном устройстве хранения, а в отдельно созданном разделе непосредственно на жестком диске (в оригинальной поставке от WD на втором диске имелся раздел с копией ПО для загрузки с него на случай выхода из строя основного диска). Для записи образа на диск понадобится компьютер с установленной ОС Linux, в случае если это ноутбук, то потребуется еще коробка для подключения жесткого диска через порт USB.
Запись OpenWrt на HDD
Качаем образ с сайта OpenWrt для своего устройства из раздела Firmware OpenWrt Install
. На момент написания статьи последняя версия была 22.03.3.
ВНИМАНИЕ! Для однодискового и двухдискового хранилища разные прошивки.
# wget https://downloads.openwrt.org/releases/22.03.3/targets/apm821xx/sata/openwrt-22.03.3-apm821xx-sata-wd_mybooklive-ext4-factory.img.gz
Распаковываем прошивку.
# gzip -d openwrt-22.03.3-apm821xx-sata-wd_mybooklive-ext4-factory.img.gz
Подключаем первый жесткий диск для NAS, полностью очищаем его.
# wipefs --all --force <strong>/dev/sdX</strong>
Записываем прошивку OpenWrt на жесткий диск.
# dd if=openwrt-22.03.3-apm821xx-sata-wd_mybooklive-ext4-factory.img of=<strong>/dev/sdX</strong> bs=64k
Где /dev/sdX
это подключенный HDD для NAS. Узнать под каким именем подключен диск можно, например, командой fdisk -l
, которая выведет информацию о подключенных дисках и разделах на них.
Отключаем первый диск, подключаем второй и выполняем те же действия что и с первым. Нам необходимо сделать два абсолютно одинаковых диска для того, чтобы при выходе из строя основного диска, с которого грузится система, можно было загрузиться со второго.
Первое включение устройства
Вставляем оба диска в NAS устройство, включаем. Если в сети настроен DHCP сервер, то устройство с него получит IP адрес, если в сети DHCP сервера нет, то IP адрес устройства по умолчанию будет: 192.168.1.1.
Входим на Web страницу настройки устройства введя в адресной строке браузера: http://DEVICE_IP_ADDR
. Пользователь по умолчанию root
, пароль отсутствует.
Где DEVICE_IP_ADDR это полученный устройством IP адрес.
В разделе System
делаем настройки по необходимости (установка пароля root
пользователю, настройка статического IP адреса, настройка NTP сервера, etc...).
Создание RAID массива для хранения данных
Подключаемся по SSH к устройству, пользователь root
, пароль, который был установлен на предыдущем шаге.
Устанавливаем необходимый набор программ (Midnight Commander ставится только для удобства работы, особой необходимости в нем нет).
# opkg install mdadm fdisk mc
Смотрим таблицы разделов установленных жестких дисков.
# fdisk -l Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors Disk model: WDC WD20EFRX-68E Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x5452574f Device Boot Start End Sectors Size Id Type <strong>/dev/sda1 * 8192 24575 16384 8M 83 Linux /dev/sda2 32768 245759 212992 104M 83 Linux</strong> Disk /dev/sdb: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors Disk model: WDC WD20EFRX-68E Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x5452574f Device Boot Start End Sectors Size Id Type <strong>/dev/sdb1 * 8192 24575 16384 8M 83 Linux /dev/sdb2 32768 245759 212992 104M 83 Linux</strong>
Таблицы разделов на дисках у нас должны быть абсолютно идентичными, первый раздел загрузочный (sda1, sdb1), второй это система (sda2, sdb2). Первый диск, с которого происходит загрузка системы помечается как sda
, второй как sdb
. Между разделами присутствует пустое пространство, как написано на сайте OpenWrt оно может быть использовано в будущем если понадобиться увеличить размер какого-то из разделов, в связи с этим раздел под хранилище рекомендуют создавать начиная с 2097152 цилиндра, тем самым оставив для системных нужд 1Гб не занятого пространства.
Создаем раздел под хранилище.
# fdisk /dev/sda Command (m for help): <strong>n</strong> Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default e): <strong>p</strong> Partition number (3-4, default 3): <strong>3</strong> First sector (2048-3907029167, default 2048): <strong>2097152</strong> Last sector (2048-3907029167, default 3907029167): 3907029167 Command (m for help): <strong>w</strong> The partition table has been altered. Syncing disks.
В примере номер последнего цилиндра Last Sector
, указан для диска 2Tb, для дисков других объемов ориентируемся на значение default
.
Повторяем процедуру для второго диска /dev/sdb
. В итоге у нас должна получиться такая картина.
# fdisk -l Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors Disk model: WDC WD20EFRX-68E Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x5452574f Device Boot Start End Sectors Size Id Type /dev/sda1 * 8192 24575 16384 8M 83 Linux /dev/sda2 32768 245759 212992 104M 83 Linux <strong>/dev/sda3 2097152 3907029167 3904932016 1.8T 83 Linux</strong> Disk /dev/sdb: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors Disk model: WDC WD20EFRX-68E Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x5452574f Device Boot Start End Sectors Size Id Type /dev/sdb1 * 8192 24575 16384 8M 83 Linux /dev/sdb2 32768 245759 212992 104M 83 Linux <strong>/dev/sdb3 2097152 3907029167 3904932016 1.8T 83 Linux</strong>
Как видно, на обоих дисках появилось по разделу под хранилище (sda3 и sdb3), теперь их необходимо объединить в RAID 1 массив.
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
Получаем UUID созданного массива.
# mdadm --examine --scan ARRAY /dev/md/0 metadata=1.2 UUID=<strong>39891a44:c43a0fb2:7b792a70:931a5505</strong> name=wdnas:0
Полученный UUID записываем в файл /etc/config/mdadm
, раздел config array
, параметр option uuid
. В конфигурационном файле по умолчанию данный параметр может быть заполнен, перезаписываем на свое значение.
config mdadm option email root # list devices /dev/hd* # list devices /dev/sd* # list devices partitions config array option uuid <strong>39891a44:c43a0fb2:7b792a70:931a5505</strong> option device /dev/md0 # option name raid:0 # option super_minor 0 # list devices /dev/sda1 # list devices /dev/sdb1 # option spares 0 # option spare_group spares # option bitmap /bitmap.md # option container 00000000:00000000:00000000:00000000 # option member 1
Создаем файловую систему на созданном RAID массиве.
# mkfs.ext4 /dev/md0
Проверить состояние массива можно командами.
# cat /proc/mdstat
и
# mdadm --detail /dev/md0
Создаем папку для монтирования раздела хранилища.
# mkdir /mnt/md0
В WEB интерфейсе создаем точку монтирования раздела хранилища, System -> Mount Points -> Mount Points -> Add
. В выпадающем меню UUID
выбираем RAID массив /dev/md0
, в выпадающем меню Mount point
в разделе Custom
указываем путь к папке /mnt/md0
. Включаем пункт Enabled
.
Синхронизация загрузочного и системного разделов на случай отказа диска
На случай отказа диска, с которого происходит загрузка на второй диск так же была загружена прошивка OpenWrt, так, чтобы разделы на дисках были идентичными. Здесь необходимо сделать небольшое отступление и рассказать про то, с какого диска происходит загрузка.
По маркировке компании Western Digital если смотреть на устройство спереди, то в левом отсеке располагается диск A, в правом диск B. Но по факту SATA порт 0 находится справа (диск B) и диск, при установке обоих дисков, маркируется в системе как sda, SATA порт 1 находится слева (диск A) и диск маркируется в системе как sdb. Когда в устройство вставлены оба диска, то загрузка происходит с правого диска (диск B, sda). Если вставлен только один диск A, то загрузка произойдет с него и в системе он будет называться sda. Если вставлены оба диска и произойдет сбой правого диска B, то диск A будет переименован в sda после перезагрузки устройства.
Для того, чтобы на втором диске иметь актуальную копию конфигурации и установленного ПО, настроим синхронизацию с активного раздела на резервный, для этого устанавливаем программу rsync
.
# opkg install rsync
Создаем папки для монтирования резервных разделов.
# mkdir /mnt/sdb1 # mkdir /mnt/sdb2
В WEB интерфейсе создаем точки монтирования резервных разделов, аналогично тому, как это делалось для RAID массива ранее, System -> Mount Points -> Mount Points -> Add
. В итоге в разделе Mounted file systems
должна быть похожая картина.
В WEB интерфейсе в разделе Scheduled Tasks
добавляем две записи на ежедневное копирование в 3 часа ночи.
00 03 * * * /usr/bin/rsync -auxHSv --delete-before /boot/* /mnt/sdb1/ 05 03 * * * /usr/bin/rsync -auxHSv --delete-before --exclude=/boot/* --exclude=/dev/* --exclude=/mnt/* --exclude=/proc/* --exclude=/sys/* /* /mnt/sdb2/
Установка и настройка общих сетевых папок
Устанавливаем Samba для реализации доступа к хранилищу по сети. Для облегчения работы с организацией общего доступа к папкам через Web интерфейс OpenWrt установим пакет luci-app-samba
.
# opkg install samba4 luci-app-samba4
В браузере принудительно обновляем страницу управления OpenWrt комбинацией клавиш Ctrl+F5
. Переходим в раздел Services -> Network shares
(если данное меню не доступно, то перезагружаем устройство).
Создадим на хранилище общедоступную папку Public
. В разделе Shared Directories
заполняем поля:
- Name - Имя общей папки, Public
- Path - Полный путь к папке, /mnt/md0/Public
- Browseable - папка видна на устройстве, Да
- Allow guests - разрешить доступ всем пользователям, Да
Сохраняем и в проводнике заходим на устройство, Пуск -> Выполнить -> \\DEVICE_IP_ADDR
В открывшемся окне мы видим созданную общедоступную папку Public
, но как только мы попробуем в нее зайти, то получим сообщение об ошибке. Проблема в том, что при создании общедоступного ресурса через Web интерфейс фактически папка на диске не создается, ее необходимо создать вручную с помощью доступа по SSH и не забыть установить на нее права доступа. Официального плагина для управления файлами через Web для OpenWrt я не нашел. Получается, что с одной стороны Web интерфейс нам должен помочь в организации доступа, с другой стороны, всё это как-то не доделано.
Заходим на устройство по SSH для создания папки /mnt/md0/Public
и установки на нее прав.
# mkdir /mnt/md0/Public # chmod -R 777 /mnt/md0/Public
К сожалению, Web интерфейс не позволяет управлять пользователями Samba, можно только ограничивать доступ по пользователю, которые уже созданы, а для создания, изменения и удаления пользователей необходимо опять воспользоваться командной консолью.
Для создания пользователей Samba необходимо установить компоненты для управления пользователями в системе, т.к. без создания системного пользователя нельзя создать пользователя Samba.
# opkg install shadow-useradd shadow-userdel
Создаем пользователя в системе и Samba, перезагружаем сервис.
# useradd -r -s /bin/false <strong>username</strong> # smbpasswd -a <strong>username</strong> # service samba4 restart
Где username - имя пользователя, которому будет предоставлен общий доступ, при этом доступа к системе у него не будет.
В WEB интерфейсе в разделе Services -> Network shares
в поле Allowed users
записываем созданного пользователя для общедоступной папки. Теперь при попытке обращения к этой папке будет запрашиваться логин и пароль.
Дополнительный полезный софт
Чтобы диски не работали постоянно рекомендую поставить утилиту hd-idle
, которая позволяет переводить диски в спящий режим через определенное время простоя.
# opkg install hd-idle
Настройка осуществляется в Web интерфейсе Services -> HDD Idle
.
Заключение
OpenWrt на NAS оставляет о себе двоякое мнение. Плюсы это добрый старый Linux хоть и порезанный со всеми его достоинствами и недостатками. Минусы это не доделанный Web интерфейс, без которого не подготовленному пользователю будет очень сложно разобраться как что-то настроить. Я понимаю, что данная ОС рассчитана на маршрутизаторы, а не для NAS, уши маршрутизаторов торчат почти в каждой менюшке, но хочется, чтобы если работа разработчиков началась в направлении NAS, то, чтобы она была до своего логического завершения.