Skip to content

Instantly share code, notes, and snippets.

@s3rgeym
Last active April 5, 2024 10:30
Show Gist options
  • Select an option

  • Save s3rgeym/45aba25b4111f8b2c30b883722ec3964 to your computer and use it in GitHub Desktop.

Select an option

Save s3rgeym/45aba25b4111f8b2c30b883722ec3964 to your computer and use it in GitHub Desktop.
Домашний файловый сервер на Ubuntu

Домашний файловый сервер на Ubuntu

Установка и настройка Ubuntu

Качаем образ Ubuntu Server и записываем его на флешку:

$ sudo dd if=/home/sergey/Downloads/ubuntu-21.04-live-server-amd64.iso of=/dev/sda conv=fdatasync status=progress

Далее потребуются ненужный системный блок, монитор, мышка и клавиатура.

Ставим Ubuntu, в качестве имени хоста указываем, например, ubuntu-server, не забываем отметить Install OpenSSH Server, так как для управления сервером мы будем использовать ssh. После успешной установки перегружаемся.

Ставим на сервере Avahi Daemon, который делает машину доступной в локальной сети по имени хоста как <имя-хоста>.local.

$ sudo apt install avahi-daemon

Проверяем запущен ли сервис:

$ systemctl status avahi-daemon.service

В Ubuntu особой настройки Avahi не требуется.

Делаем файлопомойку. У меня, например, есть несколько HDD, которые я объеденил в RAID-0 массив. Данные в RAID-0 записываются поочередно на два и более устройств, что увеличивает скорости чтения и записи. Недостатком является утеря данных при выходе одного из дисков, но для файлопоймойки это не принципиально.

# по-очередно размечаем диски
$ sudo cfdisk /dev/sdb
$ sudo cfdisk /dev/sdc

# на каждом диске я создал по одному разделу, затем объеденил их в RAID-0
$ sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb1 /dev/sdc1

# создал файловую систему на raid-устройстве
$ sudo mkfs.xfs /dev/md0

# чтобы RAID-массив монтировался при запуске
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=ubuntu:0 UUID=57ff66e8:a0268e82:3d39b7c2:c6c37bf9

# создаем точку монтирования для raid-массива
$ sudo mkdir /mnt/data

# редактируем /etc/fstab, добавляя строчку в конец
$ sudo nano /etc/fstab
/dev/md0        /mnt/data           xfs    defaults          0       0

# монтируемся
$ sudo mount -a

# создаем каталог, который будем шарить
$ sudo mkdir /mnt/data/share

# меняем пользователя и права

# клиенты samba владельцем файла обычно выставляют nobody:nogroup
$ sudo chown nobody:nogroup /mnt/data/share

# все файлы созданные в данном каталоге будут наследовать его группу, т.о. анонимный пользователь Samba сможет с ними работать
# 
# Пример:
#   $ sudo mkdir foo
#   $ ls -l
#   total 4
#   drwxrwxrwx 6 nobody nogroup 4096 Jun 21 19:52 dist
#   drwxr-sr-x 2 root   nogroup    6 Jun 21 19:57 foo

$ sudo chmod 2777 /mnt/data/share

Для общего доступа к файлам юудет использоваться NFS. Альтернативой NFS является Samba, которая сложна в настройке и без тонкой конфигурации показывает довольно низкую скорость передачи данных 7-11 MiB/s.

$ sudo apt install nfs-kernel-server
$ sudo systemctl enable nfs-server

В /etc/exports добавляем строку:

/mnt/data/share 192.168.0.0/24(rw,sync,no_subtree_check)

# где: 65534 ‒ это id пользователя nobody, а 65534 ‒ группа nogroup 
/mnt/data/share 192.168.0.0/24(rw,all_squash,sync,no_subtree_check,anonuid=65534,anongid=65534,insecure)

И чтобы применить изменения вызываем:

$ sudo exportfs -a
$ sudo apt-get install transmission-cli transmission-common transmission-daemon
...
$ sudo usermod -a -G debian-transmission $USER
$ sudo mkdir -p 2755 /mnt/data/share/Downloads
$ sudo chown -R debian-transmission:debian-transmission /mnt/data/share/Downloads
$ sudo vim /etc/transmission-daemon/settings.json
    "download-dir": "/mnt/data/share/Downloads",
    ...
    "rpc-password": "your-password",
    ...
    "speed-limit-up": 100,
    "speed-limit-up-enabled": true,

$ sudo systemctl reload transmission-daemon

Lines below this comment will be discarded

Подключение к серверу

Linux

Настройка Avahi

Avahi нужен для того чтобы заработало подключение к хосту по имени (этот шаг можно пропустить и в дальнейшем подключаться по IP).

$ yay -S avahi nss-mdns

Так же нужно отредактировать /etc/nsswitch.conf, строчку hosts, добавив mdns_minimal [NOTFOUND=return] до resolve:

hosts: ... mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns ...

Запускаем Avahi демона:

$ sudo systemctl enable --now avahi-daemon

Проверяем:

$ ping -c 3 ubuntu-server.local
PING ubuntu-server.local(ubuntu-server.local (fe80::264b:feff:fe89:ed8f%wlan0)) 56 data bytes
64 bytes from ubuntu-server.local (fe80::264b:feff:fe89:ed8f%wlan0): icmp_seq=1 ttl=64 time=91.8 ms
64 bytes from ubuntu-server.local (fe80::264b:feff:fe89:ed8f%wlan0): icmp_seq=2 ttl=64 time=4.73 ms
64 bytes from ubuntu-server.local (fe80::264b:feff:fe89:ed8f%wlan0): icmp_seq=3 ttl=64 time=1.60 ms

--- ubuntu-server.local ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 1.601/32.701/91.771/41.787 ms

Подлючение по SSH

Генерируем пару RSA-ключей для подключения по SSH (если требуется):

$ ssh-keygen

Чтобы не вводить постоянно пароль, добавляем пуьличный ключ на сервер:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub sergey@ubuntu-server.local

Подкоючаемся к серверу:

$ ssh sergey@ubuntu-server.local

NFS

$ yay -S nfs-utils
$ sudo mount ubuntu-server.local:/srv/nfs /mnt/nfs

Windows

Способы подключения по SSH

Устанавливаем Chocolatey.

Запускаем PowerShell от имени администратора и ставим Putty:

> choco install -y putty

image

Если у вас установлен WSL, то одключение к серверу ничем не будет отличаться от способа для Linux.

image

Доступ к расшаренным данным

image image

Баг моей версии Windows: если при подключении сетевого диска указать имя хоста, то в проводнике он будет отображаться как Disconnected Network Drive.

image

Управление торрентами

image

Полезные команды

# информация об ip адресе
$ ip a

# выключение сервера
$ sudo poweroff

# перезагрузка, например после обновления
$ sudo reboot

# обновление системы
$ sudo apt update && sudo apt upgrade
@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

$ sudo apt-get install transmission-cli transmission-common transmission-daemon
...
sergey@ubuntu-server:~$ cd /etc/transmission-daemon
sergey@ubuntu-server:/etc/transmission-daemon$ ls
README.json  settings.json
sergey@ubuntu-server:/etc/transmission-daemon$ sudoedit settings.json
    "download-dir": "/mnt/data/share/Downloads",
    ...
    "rpc-password": "your-password",
    ...
    "speed-limit-up": 100,
    "speed-limit-up-enabled": true,
sergey@ubuntu-server:/etc/transmission-daemon$ sudo systemctl reload transmission-daemon
sergey@ubuntu-server:/etc/transmission-daemon$

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

sergey@ubuntu-server:/mnt/data$ sudo dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.42873 s, 313 MB/s
sergey@ubuntu-server:/mnt/data$ cd /
sergey@ubuntu-server:/$ sudo dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.75528 s, 390 MB/s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment