Syntax highlighting of linux/filesystem

= Filesytem =

<<TableOfContents()>>

== Полезные ссылки ==

[[https://askubuntu.com/questions/276669/how-to-monitor-disk-activity|Активность диска|class=" moin-https"]]

[[https://ru.stackoverflow.com/questions/544622/Как-протестировать-скорость-чтения-записи-блочного-устройства|Скорость диска|class=" moin-https"]]

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

{{{#!highlight bash
# разделы в виде их точек монтирования и их заполненность в Gb
df -H

# все разделы, имена устройств и расположение на диске
fdisk -l

# использование диска
df -h --totalk

# использование inodes
df -Ti /

# размер директории
du -h /path/to/folder

# размер директории (без вывода файлов)
du -hs /path/to/folder

# отображение размера директорий с сортировкой
du -chd 1 | sort -h

}}}

== Очистка диска ==

=== По размеру директорий ===

{{{#!highlight bash
df -h
du -hs /dir
sudo du -chd 1 | sort -h

}}}

=== Docker ===

{{{#!highlight bash
docker system df
docker rmi $(docker images | grep "<none>" | awk '{print $3}')

docker ps -s
# --- https://docs.docker.com/config/pruning/#prune-everything
#     https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes
docker system prune -a

}}}

Все логи контейнера храняться в директории ''/var/lib/docker/containers'', поэтому при обильном выводе журнала директория контейнера может существенно вырасти. Перезауск контейнера удаляет историю логов.
Логи можно лимитировать:
Создаем (корректируем) файл конфигурации докер-демона 

{{{#!highlight bash
sudo systemctl restart docker.service
sudo vim /etc/docker/daemon.json

}}}

{{{#!highlight bash
{
  "log-opts": {
    "max-size": "100m"
  }
}

}}}

Запускаем докер-демон

{{{#!highlight bash
# sudo systemctl daemon-reload
sudo systemctl start docker.service
sudo systemctl status docker.service

}}}

=== Journal ===

{{{#!highlight bash
cd /var/log
sudo du -chd 1 | sort -h
# --- https://ubuntuhandbook.org/index.php/2020/12/clear-systemd-journal-logs-ubuntu/
sudo journalctl --vacuum-time=2days
# --- or
sudo journalctl --vacuum-size=100M
# ---

}}}

=== Apt ===

{{{#!highlight bash
sudo apt-get autoremove

sudo du -sh /var/cache/apt
sudo apt-get clean

du -sh ~/.cache/thumbnails
rm -rf ~/.cache/thumbnails/*

}}}

=== Postgres ===

{{{#!highlight bash
# --- если размер тома postgresql  большой, то заходим в БД и смотрим размер
#       каждой существующей БД. При необходимости удаляем
postgres=# SELECT pg_size_pretty(pg_database_size('esint_fcs'));
postgres=# drop database esint_fcs;
postgres=# \q

}}}

== Монтирование ==

=== Mount Block Device ===

{{{#!highlight bash
# --- отображаем блочные устройства
lsblk
# --- разметка
sudo cfdisk /dev/vdb
# --- записываем ФС
sudo mkfs.ext4 /dev/vdb1
# --- монтируем
sudo mount /dev/vdb1 /opt
# --- автомонтирование
# --- смотрим ID блока
sudo blkid
# --- корректируем fstab
sudo vim /etc/fstab
# add:
# UUID=id-from-blkid /opt            ext4    defaults 0 0

}}}

=== Mount Linux Directory ===

pc1 - машина на которую монтируется
pc2 - удаленная машина, на которой хранится контент

{{{
# --- pc2
sudo apt install openssh-server
# --- pc1
sudo apt-get install sshfs
# директории должны существовать
# sshfs ЧТО КУДА
sshfs zoid@192.168.1.67:/home/zoid/projects/pi ~/mnt/pi

# --- pc1
# ---  размонтирование
sudo umount ~/mnt/pi

}}}

=== Mount Windows Share ===

Монтирование Windows Share

Устанавливаем необходимые пакеты

{{{#!highlight bash
sudo apt install cifs-utils

}}}

Создаем файл с Windows-пользователем и паролем, например. ''/home/user/.smbcredentials''

{{{#!highlight bash
username=windows-username
password=windows-password

}}}

Команда монтирования

{{{
sudo mount -t  cifs //WINSRV/WINFOLDER /local/path/ -o credentials=/home/user/.smbcredentials

}}}

Команда размонтирования

{{{#!highlight bash
sudo umount /local/path

}}}

Автоматическое монтирование через ''/etc/fstab''

{{{#!highlight bash
# /etc/fstab
...
# windows share
//WINSRV/WINFOLDER /local/path/ cifs credentials=/home/user/.smbcredentials 0 0

}}}

Если через ''fstab''* авто-монтирование не работает (например, в AltLinux) и ресурс монтируется только при выполнении команды `mount -a`, то можно попробовать [[https://www.linuxquestions.org/questions/slackware-14/why-is-fstab-entry-not-automounting-4175598739/|так|class=" moin-https"]]

{{{#!highlight bash
# создаем новый файл
# vim /etc/NetworkManager/dispatcher.d/mount-nas.sh

#!/bin/sh -efu
/bin/mount -a
exit $?

}}}

Перезапускаем систему

== NFS ==

{{{#!highlight bash
# --- install the NFS Common client
sudo apt-get install nfs-common
# --- mount the shared folder from the host to a mount folder on the client
sudo mount serverIP:/exportFolder_server /local/folder
# sudo mount 10.0.100.216:/c/PUBLIC/k8s-data/ ~/nas

}}}

== Как это сделать? ==

=== Move Home Directory to Another Device ===

Link: https://help.ubuntu.com/community/Partitioning/Home/Moving

=== Create / Change Swap ===

[[https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04|link|class=" moin-https"]]

Проверяем наличие swap

{{{#!highlight bash
sudo swapon --show
# или 
free -h

}}}

Проверяем наличие свободного пространства

{{{#!highlight bash
df -h

}}}

Если файл существует, удаляем его

{{{#!highlight bash
sudo swapoff /swapfile
sudo rm  /swapfile

}}}

Создаем swap-файл

{{{#!highlight bash
sudo fallocate -l 2G /swapfile
ls -lh /swapfile

}}}

Активируем swap-файл

{{{#!highlight bash
sudo chmod 600 /swapfile
ls -lh /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
free -h

}}}

Делаем swap-файл постоянным

{{{#!highlight bash
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

}}}

Настраиваем swap

{{{#!highlight bash
cat /proc/sys/vm/swappiness
# 60
sudo sysctl vm.swappiness=10
# vm.swappiness = 10
sudo vim /etc/sysctl.conf
# /etc/sysctl.conf
# добавляем в конец файла
# vm.swappiness=10
cat /proc/sys/vm/vfs_cache_pressure
# 100
sudo sysctl vm.vfs_cache_pressure=50
# vm.vfs_cache_pressure = 50
sudo vim /etc/sysctl.conf
# /etc/sysctl.conf
# добавляем в конец файла
vm.vfs_cache_pressure=50

}}}