3 заметки с тегом

bash

Ubuntu: Running Out of Space и количество inodes

Одна из причин, почему ваш Ubuntu сервер может сигнализировать, что кончилась память, тогда как её предостаточно — слишком большое количество файлов. Каждый диск в зависимости от размера имеет ограниченное максимальное количество файлов и папок, которые вы можете создать.

Проверить количество используемых inodes можно командой:

root@ec2-consumer:~# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/root        2.5M  2.1M  419K   84% /
devtmpfs         482K   349  482K    1% /dev
tmpfs            484K     5  484K    1% /dev/shm
tmpfs            484K   602  483K    1% /run
tmpfs            484K     4  484K    1% /run/lock
tmpfs            484K    18  484K    1% /sys/fs/cgroup
/dev/loop1         16    16     0  100% /snap/amazon-ssm-agent/4046
/dev/loop5        11K   11K     0  100% /snap/core18/2253
/dev/nvme1n1      25M  462K   25M    2% /var/www
tmpfs            484K    22  484K    1% /run/user/0

Видим 84% около /dev/root — процент очень большой, это свидетельствует о проблеме. Обычно должно быть не больше 50%, а 80% — это верхний предел.

Причин может быть несколько, например, у вас есть какой-то скрипт, пишущий много логов или временных файлов в /tmp. В моём случае это была библиотека phrets, которая создаёт много пустых временных файлов в /tmp.

Если не знаете, где превышаете лимит по количеству файлов, запустите команду (может занять несколько минут):

du --inodes -d 3 / | sort -n | tail

Быстрое решение

Просто удалите лишние файлы. Это можно сделать по шаблону regexp:

find /tmp -type f -mtime +0 -name 'phrets*' -execdir rm -- '{}' \;

Здесь -mtime +0 фильтрует все файлы, которые были созданы больше суток назад — я не хотел удалять все файлы, так как не был уверен, что библиотека phrets не использует самые свежие для чего-то нужного (хотя они все и были пустыми). Почитайте про значения параметра mtime, чтобы фильтровать как давно созданные файлы, так и недавно.

Долгое решение

Нужно увеличить количество inodes. Это крайне редкое и радикальное решение, которое хорошо описано тут — https://www.ctrl.blog/entry/how-to-all-out-of-inodes.html.

Как улучшить терминал в Mac OS X: iTerm2, omyzsh, zsh

Отличная статья про апгрейд встроенного Terminal
https://medium.com/@Clovis_app/configuration-of-a-beautiful-efficient-terminal-and-prompt-on-osx-in-7-minutes-827c29391961

Краткий план действий

  1. Ставим iTerm2 на замену Terminal. Они нормально сосуществуют и можно будет откатиться, если не понравится.
brew cask install iterm2
  1. Ставим цветовую cхему для iTerm2 (сохраняйте именно как .itermcolors) — это набор цветов и ничего больше. На данном этапе терминал всё ещё будет выглядеть уныло.
  2. Качаем шрифт с поддержкой дополнительных символов-иконок: обычный или жирный (он контрастнее) — и устанавливаем в систему. Иначе увидим не иконки, а пустые квадратики.
    Меняем размер шрифта на 12-14pt или какой удобнее.
  3. Через консоль iTerm’a устанавливаем Zsh (вместо стандартного Bash) и Oh my Zsh — само ядро командной строки и оболочку с форматированием вокруг неё.
# Возможно, zsh у вас уже есть по умолчанию. Чтобы проверить, нужно ввести : 
which zsh
# Если вернёт путь, значит есть. Если нет, то ставим:
brew install zsh zsh-completions
# Устанавливаем Oh my Zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
  1. Важно: теперь основной конфигурационный файл консоли — ~/.zshrc, а не ~/.bashrc или ~/.bash_profile.
  2. Скачиваем в дефолтную директорию тему — самую маковку, которая добавит красоты в терминал
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
# Редактируем ~/.zshrc и меняем конфиг
ZSH_THEME="powerlevel9k/powerlevel9k"
  1. Перезагружаем iTerm и вуаля.

Улучшение вида и поведения терминала

  1. Вид самой строки
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir rbenv vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time)
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='red' # Будет менять цвет, если есть обновления в гит-репозитории
  1. Я не стал делать перенос строки (POWERLEVEL9K_PROMPT_ON_NEWLINE=true), так как у меня терминал всегда на всю ширину экрана и места хватает.
  2. Обязательно: iTerm → Preferences → Profiles → Keys → Load Preset… → Natural Text Editing, чтобы работала навигация через Option + стрелки и прочее.
  3. Можно добавить автодополнение команд на основе истории
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
vim ~/.zshrc
# Внутри файла добавляем через пробел название плагина
plugins=(… zsh-autosuggestions)
  1. Включаем автозагрузку ssh-ключей при старте терминала:
    https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/ssh-agent
vim ~/.zshrc
# Внутри файла добавляем через пробел название плагина
plugins=(… ssh-agent)
# Сразу ниже включаем ssh-agent и указываем ключи через пробел — у меня их два
zstyle :omz:plugins:ssh-agent agent-forwarding on
zstyle :omz:plugins:ssh-agent identities id_rsa id_rsa2
# Эта строка у вас уже будет, главное команды выше поместить до этой строки с source
source $ZSH/oh-my-zsh.sh
  1. Перезагружаем iTerm. Уже всё готово!
  2. Опционально: после всех правок IDE, которые содержат встроенный терминал, могут выглядеть слегка кривовато. Нужно им помочь с определением шрифта. Например, в VS Code в настройках меняем параметры:
"terminal.integrated.fontFamily": "Meslo LG M for Powerline"
"terminal.integrated.fontSize": 12

Объём диска и папки

Никак не могу удержать в голове эти команды, так как они нужные не так часто, но всё же настолько, чтобы записать и больше не искать.

Сколько места на диске:

df -h

Сколько места занимает папка:

du -sh ./folder

Что именно занимает больше всего места внутри папки:

du -sh ./folder/*