Конфигурирование файлового хранилища (и немного про администрирование)
Всем привет! Решил поделиться опытом настройки небольшого хранилища на базе Linux (дистрибутив не важен, но был похож на Альт/Дебиан). Заодно поднял NFS, чтобы расшарить папку для клиентов в локальной сети. В процессе всплыло много нюансов, о которых стоит знать новичкам. Расскажу по шагам, добавляя свои комментарии и дополнительные команды, которые могут пригодиться в реальной работе.
Часть 1. RAID5 из трёх дисков
Допустим, у нас есть сервер с тремя дополнительными дисками по 1 ГБ (в реальности, конечно, побольше, но для теста сойдёт). Сначала смотрим, какие диски есть в системе:
bash
123
lsblk
# или
fdisk -lВ моём случае это были sdb, sdc, sdd. Можно также проверить их размер и убедиться, что они чистые.
Установка mdadm и создание RAID
Если пакет mdadm не установлен, ставим:
bash
1
apt update && apt install mdadm -y # для Debian/Ubuntu/АльтСоздаём RAID5:
bash!
1
mdadm --create --verbose /dev/md0 -l 0 -n 2 /dev/sd{b,c,}Здесь важно понимать:
-l 0 — уровень RAID 5 (чередование с чётностью, полезная ёмкость = (n-1) * размер диска).
-n 2 — количество дисков в массиве.
/dev/md0 — имя создаваемого устройства.
После создания можно посмотреть прогресс синхронизации (rebuild):
bash
1
cat /proc/mdstatИли детальную информацию:
bash
1
mdadm --detail /dev/md0Проверим, что массив виден в системе:
bash
1
lsblkСохраняем конфигурацию RAID
В некоторых дистрибутивах (особенно в Альте) есть особенность: при перезагрузке массив может потерять имя, если не прописать его в конфиг. Чтобы этого избежать, создаём файл /etc/mdadm.conf:
bash!
12
echo "DEVICE partitions" > /etc/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm.confМожно также просто перенаправить вывод:
bash
1
mdadm --detail --scan >> /etc/mdadm.confПосле этого обновляем initramfs, чтобы массив собирался при загрузке:
bash
12
update-initramfs -u # для Debian/Ubuntu
# или dracut -f для RedHat-подобныхТеперь массив будет собираться с правильным именем.
Часть 2. Разметка и файловая система
RAID-массив готов, но на нём нет разделов. Создадим таблицу разделов и один раздел под данные. Я использую fdisk, но можно и parted.
bash!
1
fdisk /dev/md0Внутри fdisk:
g — создаём новую GPT-таблицу (рекомендуется для дисков >2 ТБ, но и для маленьких тоже ок).
n — новый раздел, принимаем все умолчания (весь диск).
w — записываем изменения.
После этого в lsblk появится раздел /dev/md0p1. Теперь форматируем его в ext4:
bash!
1
mkfs.ext4 /dev/md0p1Можно добавить метку тома для удобства:
bash
1
e2label /dev/md0p1 RAID5_DATAЧасть 3. Монтирование при загрузке
Создаём точку монтирования:
bash!
1
mkdir /raidДобавляем запись в /etc/fstab. Используем UUID раздела, чтобы избежать проблем с изменением имён. Узнаём UUID:
bash
1
blkid /dev/md0p1Или для ext4: lsblk -f. В fstab пишем что-то вроде:
text
1
UUID=ваш_uuid /raid ext4 defaults 0 0Если хотим использовать имя устройства, то:
text!
1
/dev/md0p1 /raid ext4 defaults 0 0Проверяем монтирование:
bash!
12
mount -a
lsblkВ выводе должно быть видно, что /dev/md0p1 примонтирован в /raid5. Теперь массив доступен.
Часть 4. Настройка NFS-сервера
Захотелось расшарить папку /raid5/nfs для клиентов в подсети 192.168.10.64/28 (это, кстати, диапазон из 16 адресов, маска 255.255.255.240). На клиентах будет автоматически монтироваться в /mnt/nfs.
Устанавливаем NFS-сервер:
bash
12
apt install nfs-server -y # в Альте пакет может называться nfs-utils
systemctl enable --now nfs-serverСоздаём папку для шары и даём на неё права (для простоты 777, но в production лучше настроить более тонко):
bash!
12
mkdir /raid/nfs
chmod 777 /raid/nfsНастройка exports
Редактируем /etc/exports. Можно очистить файл и добавить:
text!
1
/raid/nfs 192.168.10.64/28(rw,no_root_squash,no_subtree_check)Пояснения по опциям:
rw — чтение и запись.
no_root_squash — не принижать привилегии root с клиента (иногда нужно для администрирования).
no_subtree_check — отключает проверку поддеревьев, повышает производительность.
После редактирования применяем изменения:
bash!!
12
exportfs -ra
systemctl restart nfs-serverМожно проверить доступные шары с сервера:
bash
1
showmount -e localhostЧасть 5. Настройка клиента (КЛИЕНТА Alt)
На клиентской машине (предположим, IP в той же подсети) устанавливаем NFS-клиент:
bash!
1
apt-get install nfs-server -y # для Debian/Ubuntu/АльтСоздаём точку монтирования:
bash!
1
mkdir /mnt/nfsПробуем примонтировать вручную:
bash
1
mount -t nfs 192.168.10.2:/raid/nfs /mnt/nfsГде 192.168.10.2 — IP сервера. Если всё ок, то в /mnt/nfs будут видны файлы.
Автомонтирование через fstab на клиенте
Добавляем в /etc/fstab:
text!
1
192.168.10.2:/raid/nfs /mnt/nfs nfs auto 0 0Или с указанием версии NFS (например, nfs4):
text
1
192.168.10.2:/raid/nfs /mnt/nfs nfs4 auto 0 0В некоторых системах (Альт) может потребоваться запуск службы rpc-statd:
bash!
1
systemctl enable --now rpc-statdПосле этого проверяем:
bash!
12
mount -a
mount | grep nfsНемного о подводных камнях и дополнительных командах
RAID и производительность. RAID5 даёт неплохую скорость чтения, но запись медленнее из-за расчёта чётности. Можно настроить кэширование или использовать RAID10, если важна скорость.
Мониторинг RAID. Следите за состоянием массива: mdadm --monitor --scan можно добавить в cron.
Исправление ошибок. Если диск вылетел, его можно заменить: mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb, потом добавить новый.
LVM поверх RAID. Часто делают так: на RAID создают физический том LVM, потом группу и логические тома. Это добавляет гибкости с разделами.
NFS и безопасность. На production лучше использовать опции sec=krb5 (Kerberos) или ограничивать доступ по IP и использовать файрвол.
Диагностика NFS: rpcinfo -p, showmount -e, nfsstat.
Если не монтируется: проверьте, запущен ли rpcbind (rpc-statd) на сервере и клиенте.
В итоге получилась рабочая конфигурация, которую легко масштабировать. Для себя я ещё добавил запись в crontab для регулярной проверки RAID и отправки уведомлений. Надеюсь, кому-то этот опыт пригодится. Если есть вопросы — задавайте в комментариях!
Для начала определись с типом доступа, лучше всего поднять обычную Samba для Windows или NFS для Linux. Обязательно настрой квоты на дисковое пространство, чтобы один пользователь не забил всё хранилище, и не забудь про регулярные бэкапы на отдельный накопитель.
Для начала определись с типом доступа, будет ли это обычная SMB шара для винды или NFS для линукса. Обязательно сразу настрой права доступа через группы пользователей, чтобы потом не мучиться с правами на каждую папку отдельно. И не забудь поднять RAID для надежности и настроить бэкапы по расписанию.
Для надежного файлового хранилища лучше всего поднять RAID-массив, чтобы данные не пропали при поломке одного диска. Обязательно разграничь права доступа через группы пользователей и настрой регулярное резервное копирование на внешний носитель или в облако. Не забудь включить логирование, чтобы всегда видеть, кто и когда удалил или изменил важные файлы.
Для начала определись с типом доступа, лучше всего поднять обычную Samba для винды или NFS для линукса. Обязательно сразу настрой права доступа по группам и не забудь про регулярные бэкапы, иначе в один момент можешь потерять все данные.
Для начала определись с типом доступа, будет это SMB для винды или NFS для линукса. Обязательно настрой квоты на дисковое пространство и разграничь права доступа по группам пользователей, чтобы никто лишнего не удалил. Не забудь про регулярный бэкап, без него любое хранилище — это лотерея.
Для начала определись с типом файловой системы, для винды лучше брать NTFS, а под линукс ставь ext4 или btrfs. Обязательно настрой права доступа через группы пользователей и не забудь про регулярный бэкап на отдельный диск. Если дисков много, лучше сразу собирать программный RAID для надежности.