Stupid House

Установка OpenWrt на WD My Book Live Duo


Бонусом достался мне старенький NAS Western Digital My Book Live Duo. Как хранилище в домашней сети вполне годная штука, можно установить два диска до 4Tb каждый. Программная часть устройства оставляет желать лучшего, особенно после опыта использования TrueNAS, а т.к. поддержка производителем данных устройств закончилась где то в году 2016, то никаких обновлений ждать не стоит. В качестве альтернативы было решено попробовать ПО OpenWrt, для данных NAS делают отдельную сборку.

 

 

Подготовка

Программная часть 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.

wd my book live duo create mount point md0

 

Синхронизация загрузочного и системного разделов на случай отказа диска

На случай отказа диска, с которого происходит загрузка на второй диск так же была загружена прошивка OpenWrt, так, чтобы разделы на дисках были идентичными. Здесь необходимо сделать небольшое отступление и рассказать про то, с какого диска происходит загрузка.

По маркировке компании Western Digital если смотреть на устройство спереди, то в левом отсеке располагается диск A, в правом диск B. Но по факту SATA порт 0 находится справа (диск B) и диск, при установке обоих дисков, маркируется в системе как sda, SATA порт 1 находится слева (диск A) и диск маркируется в системе как sdb. Когда в устройство вставлены оба диска, то загрузка происходит с правого диска (диск B, sda). Если вставлен только один диск A, то загрузка произойдет с него и в системе он будет называться sda. Если вставлены оба диска и произойдет сбой правого диска B, то диск A будет переименован в sda после перезагрузки устройства.

Western Digital My Book Live Duo drive enumiration

Для того, чтобы на втором диске иметь актуальную копию конфигурации и установленного ПО, настроим синхронизацию с активного раздела на резервный, для этого устанавливаем программу rsync.

# opkg install rsync

Создаем папки для монтирования резервных разделов.

# mkdir /mnt/sdb1
# mkdir /mnt/sdb2

В WEB интерфейсе создаем точки монтирования резервных разделов, аналогично тому, как это делалось для RAID массива ранее, System -> Mount Points -> Mount Points -> Add. В итоге в разделе Mounted file systems должна быть похожая картина.

Western Digital My Book Live OpenWrt mounted points

В 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 записываем созданного пользователя для общедоступной папки. Теперь при попытке обращения к этой папке будет запрашиваться логин и пароль.

WD My Book Live Duo samba share access by user

 

Дополнительный полезный софт

Чтобы диски не работали постоянно рекомендую поставить утилиту hd-idle, которая позволяет переводить диски в спящий режим через определенное время простоя.

# opkg install hd-idle

Настройка осуществляется в Web интерфейсе Services -> HDD Idle.

 

Заключение

OpenWrt на NAS оставляет о себе двоякое мнение. Плюсы это добрый старый Linux хоть и порезанный со всеми его достоинствами и недостатками. Минусы это не доделанный Web интерфейс, без которого не подготовленному пользователю будет очень сложно разобраться как что-то настроить. Я понимаю, что данная ОС рассчитана на маршрутизаторы, а не для NAS, уши маршрутизаторов торчат почти в каждой менюшке, но хочется, чтобы если работа разработчиков началась в направлении NAS, то, чтобы она была до своего логического завершения.

 

Tags:
Автор: muxa, 25.01.2023
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии