NetworkAdmin.ru
رفتن به کانال در Telegram
Авторский блог про сетевое и системное администрирование. Сайт: networkadmin.ru Реклама: @dad_admin Биржа: https://telega.in/c/networkadminru
نمایش بیشتر4 725
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-47 روز
+230 روز
آرشیو پست ها
4 725
🔧 Для системных администраторов и IT-специалистов!
Ищете надежный источник знаний и поддержки? Тогда вам к нам!
📚 Что у нас есть:
- Книги по Cisco Systems, Mikrotik, VoIP, Linux и Windows Server
- Руководства по сетевым технологиям
- 📽 Видеоуроки на актуальные темы
- 🤝 Поддержка от сообщества
Присоединяйтесь к нашему сообществу профессионалов: @sysadmin1
4 725
⛔️ Скрываем SSH без VPN и Fail2Ban
SSH на 22-м порту - это первая цель для ботов и сканеров. Даже если вы используете сложный пароль или ключи, сервер всё равно получает тысячи попыток входа. Но есть способ исчезнуть, не ставя VPN и не играясь с Fail2Ban, это Port Knocking.
Это техника, при которой порт SSH по умолчанию закрыт, а открывается только после правильной последовательности простуков - попыток подключения к заранее выбранным портам.
▪️ Как это работает
Все внешние порты закрыты.
Админ отправляет секретную последовательность: например, попытки подключения к портам 7001 → 5022 → 2345.
Firewall фиксирует эту последовательность и открывает доступ к порту 22 только для вашего IP.
После таймаута порт снова закрывается.
Для сканера сервер выглядит мертвым: никакого SSH, никакого 22 порта, ноль шансов на брутфорс.
▪️ Настройка на firewalld (пример). Установим knockd:
apt install knockd
Конфиг /etc/knockd.conf:
[openSSH]
sequence = 7001,5022,2345
seq_timeout = 10
command = firewall-cmd --add-rich-rule='rule family="ipv4" source address="%IP%" port protocol="tcp" port="22" accept'
tcpflags = syn
[closeSSH]
sequence = 2345,5022,7001
seq_timeout = 10
command = firewall-cmd --remove-rich-rule='rule family="ipv4" source address="%IP%" port protocol="tcp" port="22" accept'
tcpflags = syn
Включаем сервис:
systemctl enable --now knockd
▪️ Использование с клиента
Открыть SSH:
knock server.ip 7001 5022 2345
Закрыть обратно:
knock server.ip 2345 5022 7001
Теперь можно заходить:
ssh user@server.ip
#linux #security
🧑💻 NetworkAdmin4 725
⚙️ Легкая веб-панель для управления сервером
Если вам нужен простой и удобный способ управлять linux-сервером через браузер, то посмотрите в сторону Ajenti. Это не такой мощный гигант, как Webmin, и не такой корпоративный инструмент, как Cockpit, но у него есть свои сильные стороны, которые делают панель отличным выбором для небольших серверов и бытовых задач.
Ajenti - легкая, минималистичная веб-панель, написанная на Python. Ее возможности закрывают базовые потребности администратора: просмотр логов, управление службами, настройка сети, работа с файлами и пользователями. Функциональность можно расширять через плагины, устанавливаемые прямо из интерфейса.▪️ Преимущества: 2FA по TOTP - удобно и повышает безопасность без лишних танцев. Аутентификация по сертификатам - для тех, кто любит строгий контроль доступа. Настраиваемые дашборды - можно собрать себе вкладки с нужными виджетами и даже запускать скрипты в один клик. Файловый менеджер - простой и удобный, без перегрузов. Русский язык - панель дружелюбна для тех, кто не хочет копаться в английских меню. Адаптивный интерфейс - можно зайти с телефона и быстро поправить нужный сервис. ▪️ Установка, она элементарная:
curl https://raw.githubusercontent.com/ajenti/ajenti/master/scripts/install-venv.sh | bash -s -
Скрипт автоматически определяет ваш дистрибутив, ставит зависимости, устанавливает Ajenti через pip и создаёт systemd-службу.
После установки заходите на http://<IP>:8000, логинитесь под root и сразу генерируете самоподписанный сертификат, включив работу по HTTPS.
#linux #ajenti
🧑💻 NetworkAdmin4 725
Придя на собеседование с данным ремнём вы будете автоматически приняты
#юмор
🧑💻 NetworkAdmin
4 725
📂 Автоматическая очистка мусора в Linux
В linux часто копится мусор: временные файлы, старые логи, кэш сервисов. Многие чистят это вручную или пишут свои крон-скрипты. Но в современных дистрибутивах есть встроенный механизм -
systemd-tmpfiles. Он автоматически создает, удаляет и очищает файлы и каталоги по заданным правилам.
▪️ Что умеет tmpfiles.d. Systemd-tmpfiles читает конфиги из /usr/lib/tmpfiles.d/, /run/tmpfiles.d/ и /etc/tmpfiles.d/.
Через них можно:
очищать каталоги по времени (30 дней, 12 часов и т.п.);
ограничивать размер директорий;
автоматически создавать нужные файлы с правами и владельцами;
удалять мусор после перезагрузки;
управлять содержимым /tmp, /var/tmp, /var/log и любых других путей.
▪️ Простой пример: удаляем старые файлы
Создадим конфиг:
/etc/tmpfiles.d/cleanup.conf
И добавим правило:
# Удалять файлы старше 14 дней
D /var/tmp/mycache 0755 root root 14d
Типы команд: D - очистка каталога, не удаляя его самого; d - удалить и пересоздать; R - рекурсивная очистка.После применения правила:
systemd-tmpfiles --clean
Можно запускать вручную или ждать автоматического выполнения таймером systemd.
▪️ Автоматическая очистка /tmp. В большинстве дистрибутивов это уже настроено, но можно задать свои параметры:
d /tmp 1777 root root 7d
Файлы старше 7 дней будут удалены.
▪️ Ограничение размера каталога. Пусть кэш не разрастается:
q /var/cache/nginx 500M
Тип q ограничивает каталог 500 мегабайтами, старые файлы будут удаляться первыми.
▪️ Проверка своих правил. Перед применением:
systemd-tmpfiles --verify
#linux #files
🧑💻 NetworkAdmin4 725
🙅♂️ Immutable-бит в linux
Во многих файловых системах linux есть один механизм - атрибут
immutable. Если установить его на файл или директорию, они становятся неизменяемыми: нельзя удалить, переименовать, записать, изменить права. Только root может установить и снять этот флаг.
▪️ Пример 1
Допустим, у вас есть директория /data/upload, куда разные сервисы записывают загружаемые файлы. Иногда часть приложений падает, начинает зацикливаться или выстреливает в ногу и создает сотни временных файлов, заполняя весь диск. Чтобы защититься от такого поведения, можно сделать директорию незаписываемой до тех пор, пока ее вручную не разблокируют администраторы.
Блокируем запись:
chattr +i /data/upload
Теперь попытка записи провалится:
echo test > /data/upload/test.txt
bash: /data/upload/test.txt: Operation not permitted
Разблокируем:
chattr -i /data/upload
echo test > /data/upload/test.txt # теперь работает
Проверить наличие бита:
lsattr -a /data/upload
----i---------e------- /data/upload/.
▪️ Защита критичных конфигов. Например, чтобы никто (и никакие процессы) не трогал sshd_config:
chattr +i /etc/ssh/sshd_config
▪️ Защита системных файлов
Можно защитить /etc/fstab, /boot/grub/grub.cfg или любые конфиги, которые менять должен только админ.
▪️ Блокировка смены паролей. Установка immutable на /etc/shadow полностью остановит любые попытки смены пароля:
chattr +i /etc/shadow
passwd root # не сработает
▪️ Нюансы
обновления системы могут ломаться, если immutable стоит на системных файлах;
для root это единственный простой пример, когда он не может удалить файл - хорошая загадка на собесах
#linux #filesystem
🧑💻 NetworkAdmin4 725
❗️ Как сохранить команду в историю, не запуская ее
Есть в bash одна малозаметная, но крайне удобная функция, о которой знают далеко не все. Она помогает сохранить длинную команду в истории без ее выполнения. Отлично подходит для случаев, когда вы передумали запускать команду, но хотите оставить ее на потом.
▪️ Как это работает
Вы набираете длинную строку в консоли, но понимаете, что сейчас выполнять ее не нужно. Вместо того чтобы копировать ее куда-то в файл, используйте простую комбинацию:
Alt + Shift + 3
После нажатия bash автоматически добавит символ # в начало строки. Команда будет выполнена как комментарий: фактически не запускается, потому что закомментирована, но при этом сохраняется в history вместе с #.
▪️ Как потом ее найти
Открываете поиск по истории (Ctrl + R) и просто ищете по #, нужная команда окажется первой.
Маленькая фича, но иногда очень ускоряет работу.
#bash
🧑💻 NetworkAdmin4 725
⚙️ Автоматизация резервного копирования
rsync до сих пор остается самым простым и быстрым инструментом для резервного копирования с нескольких и более серверов. А если обернуть его в ansible, можно получить полностью автоматизированную и воспроизводимую систему бэкапов, без ручных скриптов и кронов вразнобой.
Ansible будет отвечать за логику: какие хосты, какие директории, куда складывать.
rsync за быструю передачу файлов.
▪️ Пример структуры проекта
backup/
├── inventory
├── playbook.yml
└── vars.yml
▪️ vars.yml
backup_src: "/var/www"
backup_dest: "/backups/{{ inventory_hostname }}/"
▪️ playbook.yml
- hosts: all
become: yes
vars_files:
- vars.yml
tasks:
- name: Создать директорию для бэкапов
file:
path: "{{ backup_dest }}"
state: directory
recurse: yes
- name: Rsync данных
synchronize:
src: "{{ backup_src }}/"
dest: "{{ backup_dest }}"
archive: yes
compress: yes
delete: no
synchronize - это модуль ansible, который под капотом использует rsync.
▪️ Планировщик на контроллере. Бэкапы можно запускать с машины-контроллера ansible через cron:
0 3 * * * ansible-playbook /opt/backup/playbook.yml
Теперь в 03:00 ночи ansible пройдет по инвентарю и снимет инкрементальные копии со всех серверов.
➕ Плюсы такого подхода
единая логика бэкапов;
легко масштабировать на новые сервера;
rsync быстро переносит только измененные файлы.
#ansible #backup
🧑💻 NetworkAdmin4 725
🖥 RemoteApp на Windows 10/11
Если вам нужно, чтобы пользователи запускали через RDP не целый рабочий стол, а только определенное приложение, то для этого подойдет режим RemoteApp. Он чаще ассоциируется с серверами windows, но его реально настроить и на обычной win 10/11.
▪️ Что нужно сделать на сервере (удаленном Windows).
1. Включить RDP-доступ.
2. Установить нужное приложение и добавить пользователя в группу Remote Desktop Users или дать право через политику безопасности.
3. Разрешить запуск неопубликованных программ как RemoteApp: либо через групповые политики, либо через реестр:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fAllowUnlistedRemotePrograms /t REG_DWORD /d 1
Перезагрузить компьютер.
Если хотите ограничить список доступных приложений, то создайте запись в реестре:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications\<AppName> с указанием пути, иконки и имени.
▪️ Как пользователь подключается
Открываете стандартный RDP-клиент (mstsc.exe) и настраиваете подключение, затем сохраняете его как файл .RDP.
Открываете .RDP в текстовом редакторе и добавляете в конец:
remoteapplicationmode:i:1
RemoteApplicationName:s:Имя_окна
RemoteApplicationProgram:s:"C:\path\to\app.exe"
DisableRemoteAppCheck:i:1
PromptForCredentials:i:0
alternate shell:s:rdpinit.exe
При запуске этого файла на клиенте откроется только окно указанного приложения так, словно оно запускается локально.
Если нужно передать аргументы запуска, можно добавить строку RemoteApplicationCmdLine:s:....
▪️ Что важно
Хотя RemoteApp официально поддерживается на серверах с ролью RDS, этот способ работает и на win 10/11.
При работе через RemoteApp запускается только окно приложения, рабочий стол пользователя остается недоступен. Это удобно, если нужно предоставить доступ к одной программе, не раскрывая систему целиком.
Для работы может потребоваться RDP Wrapper или другие обходы, если Windows пытается ограничить одновременные сеансы.
#windows #remoteapp
🧑💻 NetworkAdmin4 725
📱 Тестирование производительности PostgreSQL
Если нужно быстро оценить, как PostgreSQL чувствует себя на разных типах дисков, файловых системах или конфигурациях виртуалок, необязательно глубоко погружаться в тюнинг СУБД. Достаточно воспользоваться встроенной утилитой
pgbench, она идет в комплекте с PostgreSQL и позволяет получить базовые, но показательные метрики.
▪️ Установка и подготовка среды. Устанавливаем PostgreSQL:
apt install postgresql
Проверяем работу службы:
systemctl status postgresql
Создаем тестовую базу:
su - postgres
psql
create database test_db;
\q
Инициализируем тестовые данные, увеличив объём в 10 раз:
pgbench -i test_db -s 10
▪️ Запуск теста нагрузки. Прогоняем тест: 5 клиентов, 2 потока, 60 секунд, вывод статистики каждые 5 секунд:
pgbench test_db -c 5 -j 2 -P 5 -T 60
Пример результата:
number of transactions actually processed: 219950
latency average = 1.362 ms
tps = 3665.930847
СУБД обработала 219 950 транзакций со скоростью ~3666 TPS, это и есть показатель, который удобно использовать для сравнения.
▪️ Что именно тестирует pgbench?
По умолчанию запускается смесь операций, напоминающая TPC-B: внутри одной транзакции идут SELECT, UPDATE и INSERT. Можно использовать свои сценарии, создавая кастомные SQL-скрипты. В документации PostgreSQL (в том числе русской) всё подробно описано.
#postgresql
🧑💻 NetworkAdmin4 725
🔓 Ansible Vault: хранение секретов и паролей
Если вы работаете с Ansible, рано или поздно возникает вопрос: куда девать пароли, ключи, токены и прочее? Хранить их в открытом виде в репозитории - явно плохая идея. Для этого существует Ansible Vault - встроенный механизм шифрования файлов и переменных.
Vault позволяет безопасно хранить секреты прямо в плейбуках или отдельных файлах, а ansible будет расшифровывать их при выполнении. Все просто, удобно и без лишних зависимостей.
▪️ Шифруем файл. Создадим защищенный файл с переменными:
ansible-vault create secrets.yml
Откроется редактор, куда можно вписать переменные, например:
db_user: admin
db_pass: S3cretP@ss
Файл автоматически сохранится в зашифрованном виде.
▪️ Редактируем зашифрованный файл
ansible-vault edit secrets.yml
▪️ Расшифровка при необходимости. Если нужно временно получить обычный текст:
ansible-vault decrypt secrets.yml
И обратно:
ansible-vault encrypt secrets.yml
▪️ Использование в плейбуках. Зашифрованный файл подключается как обычно:
vars_files:
- secrets.yml
А запуск плейбука выглядит так:
ansible-playbook site.yml --ask-vault-pass
▪️ Частичное шифрование (опционально). Можно зашифровать только нужные переменные:
ansible-vault encrypt_string 'P@ssw0rd!' --name 'db_pass'
#ansible
🧑💻 NetworkAdmin4 725
✍️ Быстрый способ выпустить свой HTTPS-сертификат через собственный CA
Сегодня почти любой сервис требует HTTPS. Даже если ресурс локальный или временный, браузеры без сертификата засыпают предупреждениями. Если нет внешнего доступа для Lets Encrypt, приходится копировать сертификаты вручную или постоянно продлевать их.
Гораздо удобнее выпустить свой корневой CA, добавить его в доверенные и генерировать сертификаты под любые домены/IP с любым сроком (хоть на 9999 дней). Покажу, как сделать это для Nginx.
В примере выпускаем сертификат для домена zabbix.internal и IP
192.168.77.55.
1️⃣ Создаем свой CA
mkdir ~/tls && cd ~/tls
openssl ecparam -out myCA.key -name prime256v1 -genkey
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 9999 -out myCA.crt
На вопросы можно отвечать что угодно, это локальный CA.
2️⃣ Генерируем ключ и CSR для сервера
openssl genrsa -out zabbix.internal.key 2048
openssl req -new -key zabbix.internal.key -out zabbix.internal.csr
3️⃣ Создаем файл расширений
mcedit zabbix.internal.ext
Добавляем:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.77.55
DNS.1 = zabbix.internal
4️⃣ Выпускаем сертификат
openssl x509 -req -in zabbix.internal.csr -CA myCA.crt -CAkey myCA.key \
-CAcreateserial -out zabbix.internal.crt -days 9999 -sha256 -extfile zabbix.internal.ext
5️⃣ Копируем сертификаты в nginx
mkdir /etc/nginx/certs
cp zabbix.internal.crt /etc/nginx/certs/
cp zabbix.internal.key /etc/nginx/certs/
Создаем DH-параметры:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
6️⃣ Настраиваем виртуальный хост nginx
listen 443 http2 ssl;
server_name zabbix.internal 192.168.77.55;
ssl_certificate /etc/nginx/certs/zabbix.internal.crt;
ssl_certificate_key /etc/nginx/certs/zabbix.internal.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Перезапуск:
nginx -t
nginx -s reload
7️⃣ Делаем CA доверенным
Передайте файл myCA.crt на свой ПК и добавьте в хранилище доверенных сертификатов.
Если нужно доверить CA прямо на Debian:
cp myCA.crt /usr/local/share/ca-certificates/
update-ca-certificates
Теперь можно заходить на сайт по доменному имени или IP, браузер будет полностью доверять сертификату.
#webserver
🧑💻 NetworkAdmin4 725
Подборка каналов IT от наших друзей:
🦥 Lazy_Programmer – Для ленивых
📲 Lazy_Programmer – В MAXе тоже есть место для лени
🤩 iwannabeprogrammer — IT-мемы
📲 iwannabeprogrammer – Мы в MAX
🎬 videos_it — База видеоуроков по IT
🐧 Linux_Club — Для Linuxоидов
📔 BOOKS — Читать не перечитать
🇷🇺 our_computer — У нас как в СССР
🔐 LazySecurity — Канал по ИБ
🔥 floppydisky — ITUMOR
📱 codebase_frontend — Красим кнопки
➡️ LazyDevOps — Канал для дев и псов
🐈⬛️ LazyTester — Протестируй канал!
4 725
🧑💻 Docker шпаргалка для ежедневной работы
▪️ Установка Docker
curl -o - https://get.docker.com | bash -
▪️ Работа с контейнерами
Запустить контейнер как службу (автостарт, проброс порта)
docker run -d -p 80:80 --restart always --name nginx-proxy nginx
Список контейнеров
docker ps # только запущенные
docker ps -a # все
Удаление контейнера
docker rm nginx-proxy # остановленного
docker rm -f nginx-proxy # принудительно
Остановить и удалить все контейнеры
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
▪️ Работа с образами
Просмотр и удаление
docker images
docker rmi nginx # удалить один
docker rmi $(docker images -aq) # удалить все
▪️ Внутри контейнера
Вход в bash
docker exec -it nginx-proxy bash
Логи
docker logs nginx-proxy
docker logs -n 100 nginx-proxy
docker logs -f nginx-proxy
Запущенные процессы
docker top nginx-proxy
▪️ Диагностика и мониторинг
Статистика ресурсов
docker stats nginx-proxy
docker stats prometheus exporter
docker stats prometheus --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
Информация о контейнере
docker inspect nginx-proxy
docker inspect -f '{{ .NetworkSettings.Networks.bridge.IPAddress }}' nginx-proxy
docker inspect --format '{{json .Mounts}}' grafana | jq .
Проверить занимаемое место
docker system df
Очистить мусор
docker system prune
▪️ Работа с файлами
Копирование файлов
docker cp nginx-proxy:/etc/nginx/nginx.conf ~/nginx
docker cp ~/nginx/nginx.conf nginx-proxy:/etc/nginx
Экспорт файловой системы контейнера
docker export nginx-proxy -o ~/nginx-proxy.tar.gz
#docker
🧑💻 NetworkAdmin4 725
🖥 Small HTTP Server
Small HTTP Server - программа родом из эпохи Windows 95 и NT, но до сих пор развивается. Написана на C++, невероятно компактная - установщик весит всего около 1 МБ.
▪️ Что умеет Small HTTP Server?
▪️ HTTP-сервер: поддерживает CGI/FastCGI, ISAPI, запуск внешних интерпретаторов (PHP, Perl и т.д.), виртуальные хосты и директории. Можно использовать как полноценный небольшой веб-сервер.
▪️ Почтовый сервер POP3/SMTP: фильтры антиспама, чёрные/белые/серые списки, переотправка писем, запуск скриптов для обработки входящей почты, интеграция с внешними антивирусами.
▪️ FTP-сервер: с виртуальными каталогами и базовым управлением пользователями.
▪️ HTTP-proxy: работает с HTTP/HTTPS/FTP, умеет докачивать файлы, кешировать контент, запрашивать сжатые данные и распаковывать их на лету (через zlib).
▪️ DNS-сервер: поддерживает рекурсивные запросы, кеширование, DNSBL, DoH (RFC8484), а также интересную функцию: если удалённый сервис не отвечает, сервер может автоматически подменять IP-адрес на резервный.
▪️ DHCP-сервер: простой, но рабочий.
▪️ HTTP-TLS VPN: есть свой мини-VPN, использующий OpenVPN TAP-драйвер. И сервер, и клиент.
▪️ Интерфейс и работа
Программа доступна под Windows, Linux и ARM, отличный вариант для маломощных одноплатников.
Все службы настраиваются через удобный веб-интерфейс со статистикой. Конфигурация хранится в обычном текстовом файле. На Windows сервер запускается просто запуском EXE, по умолчанию работает как файловый листинг каталога. Можно установить как службу.
#utils
🧑💻 NetworkAdmin
4 725
4 725
🏠 Windows Firewall: как включить логирование и понять, что именно он блокирует
Встроенный брандмауэр windows по умолчанию не пишет логи о входящих и исходящих соединениях, которые он блокирует. Из-за этого сложно понять, кто виноват: само приложение, сеть или firewall. Многие в такой ситуации просто отключают защиту целиком, но это плохая практика.
Куда правильнее включить логирование DROP-пакетов, посмотреть, что именно блокируется (порт, IP, протокол), и уже после этого создать точечное правило.
▪️ Логирование в текстовый файл. Самый простой способ - это включить запись в стандартный лог:
Set-NetFireWallProfile -Profile Public `
-LogBlocked True `
-LogMaxSize 20480 `
-LogFileName "%systemroot%\system32\LogFiles\Firewall\pfirewall.log" `
-Verbose
После включения логи будут появляться в файле pfirewall.log. В них видно источник, порт, направление и действие (DROP/ALLOW).
▪️Логирование в Event Viewer. Иногда удобнее смотреть блокировки прямо в журнале событий Windows: фильтрация, сортировка и быстрый поиск куда приятнее, чем анализ текста. Активируем аудит:
Auditpol /set /category:"System" /SubCategory:"Filtering Platform Packet Drop" /failure:enable
После этого записи о блокировках появятся в: Event Viewer → Windows Logs → Security
#windows #firewall
🧑💻 NetworkAdmin4 725
На Stepik вышел курс по Linux
Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой)
Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами.
После прохождения вы получите сертификат, который можно добавить в резюме.
Есть бесплатные демо-уроки для ознакомления. В ближайшие 48ч курс доступен со скидкой 25% по промокоду «
ADMIN25»: открыть курс на Stepik
P.S. Курс можно купить в подарок на Новый год4 725
👀 Шпаргалка: куда делось свободное место
Полезное напоминание в преддверии новогодних праздников - проверить бэкапы и свободное место 🤔 Я лишь поделюсь небольшой шпаргалкой, по которой можно определить куда делось свободное место, если в какой-то момент оно вдруг исчезло.
▪️ Проверяем общий объём занятых данных
df -h
▪️ Выясняем, какие директории занимают больше всего. Самый простой вариант:
du -h -d 1 / | sort -hr
du -hs /* | sort -hr
Ограничиваем вывод:
du -h -d 1 / | sort -hr | head -10
Топ 20 самых объемных директорий:
du -hcx --max-depth=6 / | sort -rh | head -n 20
Топ 20 самых больших файлов:
find / -mount -ignore_readdir_race -type f -exec du -h "{}" + 2>&1 \
| sort -rh | head -n 20
▪️ Проверяем inodes (иногда забиваются они)
df -ih
▪️ Ищем удаленные, но все еще открытые файлы. Если du показывает меньше, чем df, виноваты могут быть процессы, держащие удалённые файлы:
lsof | grep '(deleted)'
lsof +L1
Если видите большие файлы - перезапустите сервис или убейте зависший процесс:
kill -9 <pid>
▪️ Проверяем точки монтирования
Классическая ловушка: данные пишутся в /mnt/backup, но диск в момент копирования не смонтирован. Файлы падают на корневую ФС, а после монтирования становятся невидимыми, но место продолжают занимать.
Если суммарный размер файлов меньше занятого места, а удаленных файлов нет, то почти наверняка проблема в такой ложной точке монтирования.
#linux #storage
🧑💻 NetworkAdmin
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
