Введение #
В этой статье мы соберём современный домашний NAS на базе Fedora Server 44, файловой системы OpenZFS и файлового сервера Samba.
Долгое время я использовал TrueNAS в качестве операционной системы для хранения данных. Это отличная система, однако со временем пришёл к выводу, что в моём случае она избыточна. NAS у меня выполняет одну задачу - хранение файлов, поэтому многие возможности TrueNAS остались невостребованными. При этом всё остальное оказалось интереснее и удобнее настроить самостоятельно..
В качестве основы я выбрал Fedora Server. Мы получим полноценную Linux-систему, веб-интерфейс Cockpit, файловую систему ZFS и привычный общий доступ по SMB.
Почему Fedora Server, а не TrueNAS? #
Перед тем как перейти к настройке, хочу ответить на вполне логичный вопрос: почему вообще Fedora Server, если уже используешь TrueNAS, или почему не попробовать любые другие готовые операционные системы для nas?
На протяжении долгого времени я использовал TrueNAS в качестве основной операционной системы для домашнего NAS. Это отличное решение с удобным веб-интерфейсом и большим количеством встроенных возможностей. Однако со временем я понял, что использую лишь небольшую часть его функциональности, а некоторые особенности Truenas начали раздражать.
Для меня NAS — это прежде всего надежное хранилище данных. Все остальные сервисы — Nextcloud, Immich, Jellyfin, Grafana, Docker и другие — работают на отдельных серверах и виртуальных машинах. В результате большинство возможностей TrueNAS оказалось просто невостребованным.
Fedora Server, наоборот, предоставляет чистую и современную Linux-систему без лишних компонентов. Это дает несколько преимуществ:
- полный контроль над операционной системой;
- всегда актуальные версии программного обеспечения, но без нюансов arch-подобных систем;
- возможность самостоятельно выбрать необходимые сервисы;
- удобное администрирование через Cockpit;
- полноценную поддержку OpenZFS;
- отсутствие ограничений, характерных для специализированных NAS-дистрибутивов.
Согласен, что такой подход требует немного больше времени на первоначальную настройку и наличие знаний чуть выше базовых умений кликать мышкой. Зато в дальнейшем вы получаете максимально гибкую систему, которую легко адаптировать под свои задачи, не завися от особенностей конкретной NAS-платформы.
Именно поэтому в качестве основы для домашнего файлового сервера я выбрал Fedora Server 44.
Подготовка Fedora Server #
Обновление системы #
sudo dnf update -yВ современных RPM-дистрибутивах команда dnf update уже включает функциональность прежнего dnf upgrade.
Установка необходимых пакетов #
sudo dnf install -y \
tar gzip curl unzip git procps-ng findutils nano \
cockpit-bridge coreutils attr hostname iproute glibc-common \
systemd nfs-utils samba samba-client samba-common-toolsДополнительные инструменты #
sudo dnf install -y lm_sensors cockpit-sosreport
sudo sensors-detectsudo systemctl restart cockpit.socketУстановка Cockpit Sensors #
sudo wget https://github.com/ocristopfer/cockpit-sensors/releases/latest/download/cockpit-sensors.tar.xz
#
sudo mkdir -p /usr/share/cockpit/sensors
#
tar -xf cockpit-sensors.tar.xz cockpit-sensors/dist
#
sudo cp -r cockpit-sensors/dist/* /usr/share/cockpit/sensors/
#
rm -rf cockpit-sensors cockpit-sensors.tar.xzsudo systemctl restart cockpit.socketУстановка OpenZFS #
Добавляем репозиторий:
sudo dnf install -y https://zfsonlinux.org/fedora/zfs-release-3-1$(rpm --eval "%{dist}").noarch.rpmУстанавливаем заголовки текущего ядра:
sudo dnf install -y kernel-devel-$(uname -r | awk -F'-' '{print $1}')Устанавливаем OpenZFS:
sudo dnf install -y zfsЗагружаем модуль:
sudo modprobe zfs
# Указываем системе, чтобы модуль загружался при перезагрузке
echo zfs | sudo tee /etc/modules-load.d/zfs.confНа всякий случай проверяем, что zfs у нас будет работать после перезагрузки системы:
sudo rebootПроверяем установку:
zfs versionСоздание пула ZFS #
Создадим зеркальный пул из двух дисков:
lsblk # вывод списка дисковsudo zpool create -m /srv data mirror /dev/sda /dev/sdbВажно: не используйте в качестве точки монтирования ZFS каталог
/mntдля публикации через Samba. На Fedora Server 44 с OpenZFS 2.4.x Samba может выдавать ошибку >canonicalize_connect_path failed. Использование/srvполностью решает проблему.
В идеале крайне желательно монтировать по id диска, чтобы избежать проблем, когда при перезагрузке буквы дисков съезжают
sudo zpool create -m /srv data mirror /dev/disk/by-id/ata-XXXX /dev/disk/by-id/ata-YYYYСоздадим датасет:
sudo zfs create data/mediaПроверяем, что пул и датасет созданы:
zpool status
zfs listВключим сжатие:
sudo zfs set compression=lz4 dataНазначим владельца:
sudo chown -R stilicho:stilicho /srv/mediaЗдесь я вставлю небольшую ремарку (прости меня Эрих Мария). На твоем месте я бы перезагрузил систему и проверил бы еще раз, что пул и датасет смонтируются после перезагрузки:
sudo reboot
zpool status
zfs listВ случае, если после перезагрузки пул не смонтировался, то введи следующие команды:
sudo systemctl enable zfs-import-cache.service
sudo systemctl enable zfs-import-scan.service
sudo systemctl enable zfs-mount.service
sudo systemctl enable zfs.targetТеперь:
sudo rebootи проверяй результат
Настройка SELinux #
sudo semanage fcontext -a -t samba_share_t "/srv/media(/.*)?"
sudo restorecon -Rv /srv/mediaПроверка:
ls -Zd /srv/mediaОжидаемый результат:
system_u:object_r:samba_share_t:s0 /srv/mediaНастройка Samba #
Создаем отдельного локального пользователя Linux, который будет использоваться для доступа к SMB-шаре.:
sudo useradd samba
#
sudo smbpasswd -a sambaЗададим права пользователю samba на датасет, который мы будем расшаривать
sudo groupadd media # создаем отдельную группу для шаринга
# добавляем туда наших пользователей
sudo usermod -aG media stilicho
sudo usermod -aG media samba
# задаем права на датасет для пользователей группы media
sudo chown -R stilicho:media /srv/media
sudo chmod -R 775 /srv/media
sudo find /srv/media -type d -exec chmod g+s {} \;Создаем samba шару
Добавьте в /etc/samba/smb.conf:
[share]
comment = Shared Network Folder
path = /srv/media
browseable = yes
read only = no
valid users = samba
force group = media
create mask = 0644
directory mask = 2755Запускаем службы:
sudo systemctl enable --now smb nmb
sudo systemctl status smbПроверяем:
smbclient //localhost/share -U sambaЕсли всё настроено правильно, откроется консоль Samba.
Подключение из Windows #
Откройте проводник и введите:
\\IP-АДРЕС-СЕРВЕРА\shareВведите логин и пароль пользователя Samba.
Создайте тестовую папку и файл, затем убедитесь, что они успешно создаются и после перезапуска сервера остаются доступными.
Заключение #
В результате мы получили полноценный домашний NAS на Fedora Server 44 с файловой системой OpenZFS, веб-интерфейсом Cockpit и файловым сервером Samba. Такой подход обеспечивает полный контроль над системой, хранение данных без привязки к специализированным NAS-дистрибутивам. При этом Fedora остается обычной Linux-системой, которую легко расширить любыми сервисами по мере необходимости, что мы с вами и сделаем в следующих статьях.