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 20, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 20, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

RAID-0 из двух дисков с XFS:

sergey@ubuntu:~/Storage$ dd if=/dev/zero of=test bs=64k count=128k conv=fdatasync
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 36.1772 s, 237 MB/s

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

Samba

$ sudo apt install samba
$ sudo vi /etc/samba/smb.conf

Добавить в конец:

[share]
    comment = Ubuntu File Server Share
    path = /srv/samba/share
    browsable = yes
    guest ok = yes
    read only = no
    create mask = 0755
$ sudo mkdir -p /srv/samba/share
$ sudo chown nobody:nogroup /srv/samba/share/
$ sudo systemctl restart smbd.service nmbd.service

В Windows нужно открыть в проводнике открыть \\192.168.0.103\share

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

sergey@ubuntu:~$ sudo vi /etc/samba/smb.conf
sergey@ubuntu:~$ sudo mkdir /media/storage
mkdir: cannot create directory ‘/media/storage’: File exists
sergey@ubuntu:~$ sudo chown nobody:nogroup /media/storage
sergey@ubuntu:~$ cat /etc/samba/smb.conf
[global]
  workgroup = WORKGROUP
  security = user
  map to guest = bad user

#
# Пользователей нужно создавать вручную:
#
#   $ smbpasswd -a alex
#

# [private]
#   path = /path/to/private
#   browseable = yes
#   writebale = yes
#   guest ok = no
#   valid users = alex john
#

[share]
  path = /media/storage
  browseable = yes
  writeable = yes
  read only = no
  guest ok = yes

@s3rgeym
Copy link
Author

s3rgeym commented Jun 21, 2021

Недостатки WSL:

не читает /etc/fstab
не умеет работать с дисками напрямую

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 21, 2021

image

@s3rgeym
Copy link
Author

s3rgeym commented Jun 21, 2021

устанавливаем samba

$ sudo apt install samba

хорошим тоном считается хранение данных в /srv

добавляем ссылку на каталог в /srv/samba

$ sudo mkdir /srv/samba
$ sudo ln -s /mnt/data/share /srv/samba


Теперь отредактируем конфиг:

```bash
$ sudo nano /etc/samba/smb.conf

Все данные в этом файле можно стереть.

Минимальная секция global должна выглядеть так:

[global]
  workgroup = WORKGROUP
  security = user
  map to guest = Bad User
  socket options=SO_RCVBUF=131072 SO_SNDBUF=131072 TCP_NODELAY
  min receivefile size = 16384 
  use sendfile = true
  aio read size = 16384
  aio write size = 16384
  aio write behind = true
  dns proxy = no

Если нужен доступ к расшаренному каталогк без пароля, то добавляем секцию share (можно указать любое имя):

[share]
  path = /srv/samba/share
  browseable = yes
  writeable = yes
  read only = no
  guest ok = yes
  create mode = 0777
  directory mode = 0777

Для доступа по паролю, указываем пользователей:

[share]
  ...
  guest ok = no
  valid users = sergey

Для Samba нужно завести отдельного пользователя и задать ему пароль (не нужно пытаться ввести пароль пользователя Linux):

$ smbpasswd -a sergey

Чтобы применить настройки перезапускаем smbd.service:

$ sudo systemctl restart smbd

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

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

> Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart

Control Panel > Turn Windows features on or off > Services for NFS

image

image

image

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

Запуск ps файлов двойным кликом:

New-PSDrive HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

Я применял эти настройки:

# по-умолчанию 600 (минут)
net config server /autodisconnect:65535

# сброс настроек сетевого диска каждый раз
net use /persistent:no

net use /persistent:yes

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

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

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

image

image

@wtfc0d3
Copy link

wtfc0d3 commented Jun 22, 2021

sergey@ubuntu-server:~$ sudo mkdir -m 2777 /mnt/data/share
sergey@ubuntu-server:~$ sudo chown nobody:nogroup /mnt/data/share
sergey@ubuntu-server:~$ cd /mnt/data/share
sergey@ubuntu-server:/mnt/data/share$ mkdir foo
sergey@ubuntu-server:/mnt/data/share$ ls -l
total 4
drwxrwsr-x 2 sergey nogroup 4096 Jun 22 10:51 foo

@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