Если вам не изменяет память: используем файловые системы ramfs и tmpfs

Файловая система ramfs

Файловые системы tmpfs и ramfs работают по-разному. Файловая система ramfs может использовать только системную память, что не указывается в листинге команды «df –h», не имеет ограничений по размеру и не выдаст сообщения об ошибке в случае, если необязательное ограничение по размеру все же будет установлено и оно будет достигнуто. В том, что что сказано, что ramfs не имеет ограничения по размеру и что вы не получите сообщений об ошибке в случае, если установите необязательный предел и его превысите, противоречия нет. Ограничить размер ramfs вы можете, но вы не получите предупреждение, если превысите этот размер — система не помешает вам сделать это.

Например, вы используете следующую команду монтирования файловой системы со следующим стандартным синтаксисом:

# mount –t fs_type device mount_dir

Синтаксис команды, с помощью которой монтируется файловая система ramfs размером в 200 Мбайтов в директории /opt/data, будет следующим:

# mount –t ramfs –o size=200m ramfs /opt/data

Как уже ранее упоминалось, эта файловая система не будет показана в листинге команды «df –h». Единственный способ увидеть ее — использовать команду mount:

# mount

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
ramfs on /opt/db type ramfs (rw,size=200m)

Если вы попытаетесь записать более 200 МБ данных в эту файловую систему, то запись будет выполнена и вы не получите предупреждения о том, что превышен размер файловой системы. Задание размера в 200 Мбайтов излишне и не оказывает влияния на фактический размер ramfs и на то, сколько данных вы можете записать. Это серьезный недостаток файловой системы ramfs.

Системные администраторы из-за своей перегруженности работой иногда оставляют в файловой системе брошенные файлы после установки патчей, после установки программ или после выполнения бесконечного количества тестов, которые выполняются в некоторых системах. С помощью ramfs можно решить эту проблему эффективно. Все файлы, которые, как предполагается, не требуют долговременного хранения, можно размещать в области временного хранения (ramfs) до тех пор, пока они не станут ненужными. Размонтируйте ramfs и система вернется к нормальному состоянию без той неряшливости, которая связана с этими периодическими действиями системных администраторов.

Распаковываем и подготавливаем ядро Linux

Начнем с компиляции ядра Linux, что займет некоторое время.

Ядро Linux

Характерной чертой ядер 2.6 является то, что, если мы запускаем menuconfig, xconfig или config в первый раз, меню настроек будет основываться на конфигурации нашего текущего ядра.

Опции настроек зависят от ваших нужд, также вы можете установить module-init-tools для поддержки сжатых модулей или, создавая минимальную систему, выберите только самые необходимые опции.

Начнем с изменения исходников — команда упорядочит их, а затем запустим интерфейс конфигурации — gconfig, xconfig, menuconfig или oldconfig:

# tar xjf linux-2.6.20.tar.bz2
# cd linux-2.6.20
# make mrproper
# cp ../slitaz-tools-1.1/Makefiles/linux-2.6.20-slitaz.config .config
# make oldconfig
(# make menuconfig)
# make bzImage
# make modules
# make INSTALL_MOD_PATH=$PWD/_pkg modules_install
# cd ..

Если вам нужна более подробная информация по компиляции ядра, существует много книг на эту тему. Кстати, вы можете установить ядро, а после перезагрузки компилировать собственное ядро, следуя тем же инструкциям.

Модули

Если у Вас модульное ядро, Вы должны обдумать, какие модули Вы захотите загружать с вашего загрузочного диска после загрузки. Если у Вас есть ленточные устройства резервирования, то Вы, возможно, захотите включить модули и , модули для SCSI устройств, если они у Вас есть, и, возможно, модули PPP или SLIP, если хотите иметь доступ к сети при аварии.

Эти модули могут быть помещены в . Вы должны также включить , и . В зависимости от того, хотите ли Вы загружать модули автоматически, Вы можете также включить , и . Если Вы используете , включите его вместе с .

Основное преимущество использования модулей — возможность поместить некритичные модули на сервисный диск и загружать их по необходимости, то есть используется меньше пространства на вашем загрузочном диске. Если Вам придется иметь дело со многими различными устройствами, этот подход предпочтительнее, чем формирование одного огромного ядра с многими встроенными драйверами.

Чтобы загружать сжатую файловую систему , у Вас должна быть встроенная поддержка и . Они не должны быть в модулях.

Смешанное подключение файловой системы

Создаём скрипт инициализации init, размещаем его в корне файловой системы ramfs и даём права на запуск (755):

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -t tmpfs none /tmp

#for ubifs

#insmod /lib/modules/ubi.ko mtd=rootfs

mount -t ubifs -o ro ubi:rootfs /rom

#for jffs2

#mount -t jffs2 -o ro /dev/mtdblock1 /rom

mkdir <progdir> etc home lib root sbin usr var

mount -o ro /rom/<progdir> /<progdir>

mount -o ro /rom/bin /bin

mount -o ro /rom/dev /dev

mount -o ro /rom/etc /etc

mount -o ro /rom/home /home

mount -o ro /rom/lib /lib

mount -o ro /rom/mnt /mnt

mount -o ro /rom/root /root

mount -o ro /rom/sbin /sbin

mount -o ro /rom/usr /usr

mount -t aufs -o br=/tmp=rw:/rom/var=ro none /var

exec /sbin/init

Смотри также

Ускорение загрузки Linux отключением сервисов

Вот мы и добрались к сервисам. Оптимизация сервисов заключается в том, чтобы отключить лишнее, а также использовать только возможности, встроенные в systemd, так будет быстрее. Сначала перенесем всю функциональность на systemd.

Первым отключим rsyslog. В systemd используется свой механизм записи логов journald, поэтому вести еще один не нужно. Для отключения выполните:

Опция mask позволяет спрятать юнит, система будет думать что его не существует и не сможет загрузить. Восстановить такой юнит можно командой systemctl unmask.

В systemd реализована своя служба настройки сети — networkd, поэтому необязательно использовать NetworkManager. Работа со встроенной службой будет намного быстрее. Здесь нужно заметить, что если вы используете wifi и не хотите настраивать его вручную, через консоль, то отключать NetworkManager не стоит.

Отключаем NetworkManager и включаем networkd:

Службу networking тоже можно отключить, если не используете:

Включаем resolved, который отвечает за настройку DNS серверов:

Даем символическую ссылку на файл /etc/resolv.conf

Осталось настроить динамическое получение ip адреса при загрузке:

enp0* значит, что сеть нужно подымать только для устройств, имена которых начинаются на enp0. Готово, сеть настроена.

В systemd есть свое решение для выполнения задач по расписанию, поэтому cron можно не использовать:

С заменой разобрались, перейдем к удалению лишнего. Отключаем фаервол, на домашней машине, за маршрутизатором он не нужен:

Отключаем apport (служба отчетов об ошибках):

Я не использую ppp и мобильные соединения, поэтому и эти сервисы можно отключить.

Если вы не используете Avahi, его тоже можно отключить:

Систему AppArmor тоже можно отключить:

Также если у вас загружаются такие программы, как postfix (почтовый сервер), apache (веб-сервер), mysql (сервер баз данных) лучше их тоже убрать из автозагрузки и запускать потом вручную.

Перезагружаемся и проверяем скорость загрузки:

У меня скорость загрузки linux выросла на пять секунд. Но это нормально, учитывая, что используется VirtualBox, на реальной машине можно получить и больше. А самая лучшая оптимизация — купить SSD, там можно достичь даже скорости загрузки до двух-трех секунд.

Компилировать

Переключитесь в главный каталог buildroot, выполните команду make или выполните make O = / path / to / store / build / file (укажите место, где хранятся результаты компиляции), и buildroot автоматически загрузит и установит пакеты программного обеспечения, необходимые для создания rootfs. После завершения компиляции содержимое, связанное с rootfs, будет сгенерировано в buildroot / output. Функции каждого файла следующие:

  1. target: эта папка содержит все файлы rootfs, которые мы используем для отладки проблемы rootfs на плате разработки.
  2. image: эта папка содержит все различные типы файловых систем, мы выбираем соответствующий тип и загружаем его на плату разработки, если есть проблема, вы можете обратиться к цели для отладки.
  3. build: эта папка содержит исходные файлы пакетов, необходимых для rootfs.
  4. host: эта папка содержит инструменты и файлы конфигурации, необходимые в процессе компиляции rootfs.
  5. Makefile: Управляет процессом компиляции всей файловой системы.

Tmpfs и VM

Давайте посмотрим на некоторые наиболее интересные свойства tmpfs. Как было отмечено выше, tmpfs может использовать и RAM, и swap. На первый взгляд, это может показаться не принципиальным, но tmpfs еще известна как файловая система в виртуальной памяти (virtual memory filesystem). При этом ядро Linux «понимает» ресурс «виртуальная память» именно как единое — целое RAM и swap-пространство. Подсистема VM ядра ассигнует эти ресурсы другим подсистемам и управляет этими ресурсами behind-the-scenes (прозрачно в фоне). При этом часто без ведома «подсистемы — заказчика» перемещает страницы опреративной памяти между собственно RAM и swap.

Файловая система tmpfs запрашивает страницы у подсистемы VM для хранения файлов. При этом сама tmpfs не знает, находятся ли эти страницы в swap или в RAM; это — «проблема» VM подсистемы. Исходя из этого, tmpfs знает лишь то, что она использует виртуальную память.

Это не блочное устройство.

В отличие от большинства файловых систем (например, ext3, ext2, XFS, JFS, ReiserFS) tmpfs не является «надстройкой» над блочным устройством. Поскольку tmpfs напрямую «встроена» в VM, ее можно монтировать сразу после создания командой:

# mount tmpfs /mnt/tmpfs -t tmpfs

После выполнения команды создается новую файловая система tmpfs, смонтированная в /mnt/tmpfs и готовая к использованию. Т.е. нет потребности в форматировании командой mkfs tmpfs. Сразу после команды mount файловая система доступна для использования и имеет тип tmpfs. Это отличается от Linux ramdisks; стандартный Linux ramdisks — block devices и требует форматирования перед размещением на нем файлов. Монтируй и используй!

Отслеживание VFS с помощью утилит eBPF и bcc

Самый простой способ узнать, как ядро управляет файлами sysfs, — это посмотреть его в действии, а самый простой способ посмотреть это на ARM64 или x86_64 — использовать eBPF. eBPF (extended Berkeley Packet Filter) состоит из виртуальной машины, работающей внутри ядра, которую привилегированные пользователи могут запрашивать из командной строки. Код ядра сообщает читателю, что может сделать ядро; запуск инструментов eBPF в загруженной системе показывает, что фактически делает ядро.

К счастью, начать работу с eBPF довольно просто с помощью утилит bcc, которые доступны в виде пакетов из основных дистрибутивов Linux и подробно документированы Бренданом Греггом. Утилиты bcc — это скрипты Python с небольшими встроенными фрагментами C, поэтому любой, кто знаком с любым языком, может легко их изменить. На этот счет в bcc/tools есть 80 скриптов Python, поэтому весьма вероятно, что системный администратор или разработчик найдет соответствующий его потребностям.

Чтобы получить очень общее представление о том, какую работу выполняют VFS в работающей системе, попробуйте скрипты vfscount или vfsstat, которые показывают, что каждую секунду происходят десятки вызовов vfs_open() и подобных ему.

vfsstat.py — это скрипт Python со встроенным фрагментом C, который просто считает вызовы функций VFS.

Для менее тривиального примера давайте посмотрим, что происходит в sysfs, когда в работающую систему вставлена USB-флешка.

Посмотрите с помощью eBPF, что происходит в /sys, когда вставлена флешка.

В первом простом примере, приведенном выше, скрипт trace.py выводит сообщение всякий раз, когда запускается команда sysfs_create_files(). Мы видим, что sysfs_create_files() была запущена потоком kworker в ответ на вставку USB-накопителя, но какой файл при этом был создан? Второй пример иллюстрирует полную мощь eBPF. Здесь trace.py выводит обратную трассировку ядра (опция -K) плюс имя файла, созданного sysfs_create_files(). Фрагмент внутри одинарных кавычек представляет собой некоторый исходный код на C, включая легко распознаваемую строку format, которая побуждает компилятор LLVM на лету компилировать и выполнять код внутри виртуальной машины в ядре. Полная сигнатура функции sysfs_create_files() должна быть воспроизведена во второй команде, чтобы строка format могла ссылаться на один из параметров. Ошибки в этом фрагменте C приводят к распознаваемым ошибкам компилятора C. Например, если опущен параметр -I, результатом будет «Failed to compile BPF text». Разработчики, знакомые с C или Python, найдут, что утилиты bcc легко расширять и модифицировать.

Когда вставлен USB-накопитель, появляется обратная трассировка ядра, показывающая, что PID 7711 является потоком kworker, который создал файл с именем «events» в sysfs. Соответствующий вызов sysfs_remove_files() показывает, что удаление флешки приводит к удалению файла events в соответствии с идеей подсчета ссылок. Просмотр sysfs_create_link() с помощью eBPF во время вставки USB-накопителя (не показан) показывает, что создано не менее 48 символических ссылок.

В любом случае, какова цель файла events? Использование cscope для поиска function __device_add_disk() показывает, что она вызывает disk_add_events(), и либо «media_change», либо «eject_request» могут быть записаны в файл events. Здесь блочный уровень ядра информирует пространство пользователя о появлении и исчезновении «диска». Подумайте, насколько быстро этот метод исследует, как работает вставка USB-накопителя, в сравнении с попыткой изучить этот процесс исключительно из источников.

Файловая система tmpfs

Системные администраторы считают, что для задач, связанных с реальными данными, файловая система tmpfs обладает огромными преимуществами в сравнении с файловой системой ramfs. Файловая система tmpfs имеет заранее устанавливаемый фиксированный размер, она может размещаться в оперативной памяти или в области свопинга и будут выдаваться сообщения об ошибках в случае, если указанный размер будет превышен. Синтаксис похож на синтаксис ramfs.

# mount –t tmpfs –o size=200m tmpfs /opt/data

Команда «df –h» покажет смонтированную файловую систему tmpfs точно также, как она показывает другие смонтированные файловые системы.

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      360G  225G  117G  66% /
/dev/sda1              99M   25M   70M  27% /boot
tmpfs                 200M     0  200M   0% /opt/data

Команда mount выдаст следующий результат:

# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
tmpfs on /opt/db type tmpfs (rw,size=200m)

Если вы превысите пределы, установленные для смонтированной файловой
системы tmpfs, то получите от системы сообщение «No space left on device» («На устройстве нет места»), информирующее о том, что файловая система заполнена. Файловая система tmpfs ведет себя подобно файловой системе, монтируемой на диске, но только она энергозависима. Вы можете перейти в директорий /etc/fstab и указать там энергозависимость этих файловых систем с тем, чтобы они монтировались после перезагрузки.

Обе файловые системы ramfs и tmpfs являются энергозависимыми. Иными словами, если в системе произойдет сбой, она будет перезагружена или будет выключена по какой-либо причине, данные, хранящиеся в любой из этих файловых систем будут уничтожены. И только по этой причине вам следует периодически делать дампы данных с такой энергозависимой файловой системы на устройство постоянного хранения. Использование файловой системы, размещенной в оперативной памяти, — это быстро и дешево, но не безопасно.

Отключить автоматическое монтирование

Systemd, может автоматически устанавливать как tmpfs, даже если у вас нет записи в вашем .

Для отключения автоматического монтирования, выполните следующую команду:

# systemctl mask tmp.mount

Файлы больше не будут хранится в tmpfs, но будут на вашем блочном устройстве.
Содержание теперь будет сохранятся между перезагрузками, чего вам бы не хотелось.
Чтобы сохранить прежнее поведение и очищать каталог атоматически когда вы перезагружаете машину, рассмотрите возможность использования :

/etc/tmpfiles.d/tmp.conf
# смотрите tmpfiles.d(5)
# очистка каталога /tmp всегда включена
D! /tmp 1777 root root 0

# удалить файлы в каталоге /var/tmp старше 10 дней
D /var/tmp 1777 root root 10d

# namespace mountpoints (PrivateTmp=yes) are excluded from removal
x /tmp/systemd-private-*
x /var/tmp/systemd-private-*
X /tmp/systemd-private-*/tmp
X /var/tmp/systemd-private-*/tmp

Использование

Arch использует tmpfs в каталоге , с симлинками для совместимости и . Он также используется для в настройках по умолчанию Systemd и не требует записи в fstab, если не требуется конкрентная настройка.

2.2 и выше ожидает что будет смонтирован tmpfs для
. Монтирование в tmpfs выполняется автоматически systemd, поэтому ручная настройка в fstab больше не требуется.

Как правило, интенсивные задачи и программы ввода/вывода, которые выполняют частые операции чтения/записи могут получить пользу используя каталог TMPFS. Некоторые приложения могут даже получить существенную выгоду, снимая нагрузку некоторых (или всех) своих данных на общую память. Например, перемещение профиля Firefox в оперативную память показывает значительное улучшение производительности.

Можем ли мы доказать, что rootfs все еще смонтирован?

Как известно, простой можно избежать, когда вы работаете как привилегированный пользователь. Если не сделал ничего, кроме , мы могли бы отменить его и снова увидеть rootfs.

Однако полная последовательность не может быть обращена с помощью этой техники. Полная последовательность делает

В приведенном выше экранировании chroot мы смогли перейти из корневого каталога файловая система обратно в с помощью , поскольку файловая система была смонтирована в подкаталоге . Метод выхода не работает, когда файловая система смонтирована на корень каталог rootfs.

Я смог найти используя другой метод. (По крайней мере, один важный разработчик ядра считает это ошибкой в ​​Linux).

Проверено в Linux 4.17.3-200.fc28.x86_64:

(Я также подтвердил, что эта файловая система, как и ожидалось, пуста и доступна для записи).

  • 1 Спасибо, что нашли время изучить это и написать этот ответ.
  • @ GeorgSchölly Вы, наверное, знаете, это ответ, который я хотел знать для себя. Это был хороший способ получить это. Мне все еще кажется, что я упускаю какой-то аргумент «В каких случаях вход в ? «. Но я очень рад получить ответ на вопрос заголовка:» Почему нет файловой системы rootfs? «:).
  • @ GeorgSchölly Отредактировано снова. В частности, похоже, что между Debian 7 и обеими нашими текущими системами есть изменения. Есть сообщения из других систем, которые показывают rootfs даже после переключения с initramfs. Например, в Debian 7: unix.stackexchange.com/questions/125176/…

Редактор-автор

Создание файловой системы

Для создания такой корневой файловой системы, Вам нужно достаточно большое запасное устройство, для размещения всех файлов перед сжатием. Вам понадобится устройство, способное хранить приблизительно четыре мегабайта. Есть несколько вариантов:

  • Использовать (). В этом случае для имитации диска используется память. должен быть достаточного объема для размещения файловой системы соответствующего размера. Если Вы используете , проверьте в вашем конфигурационном файле () строчку , Которая определяет максимальный объем оперативной памяти выделяемой . Значение по умолчанию 4096КБ, которого должно быть достаточно. Вы не должны пытаться использовать такой на машине с объемом памяти менее 8МБ. Проверьте, что у Вас есть устройства /, или . Если их нет — создайте командой (старший номер , младший ).
  • Если у Вас есть достаточно большой (несколько мегабайт) неиспользуемый раздел жесткого диска, это приемлемо.
  • Использовать , которое позволяет обращаться с файлом на диске как с устройством. При использовании петлевого устройства Вы можете создать трех мегабайтный файл на вашем жестком диске и сформировать на нем файловую систему.

    Для инструкций об использовании петлевых устройств, наберите . Если у Вас нет , Вы можете получить ее вместе с совместимыми версиями и из пакета .

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

    Ниже вместо используйте имя файла. Когда Вы даете команду монтирования, для указания использовать петлевое устройство Вы должны включить опцию .

После того, как вы выбрали один из этих вариантов, подготовьте :

Эта команда обнуляет устройство.

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

Помните, что при перемещении или удалении файлов на файловой системе, система будет корректно освобождать блоки, но не будет их снова обнулять. Если Вы много удаляли и копировали, ваша сжатая файловая система может стать больше требуемой.

Затем, создайте файловую систему. Ядро Linux распознает два типа файловой системы для корневых дисков, которые автоматически копируются на . Это — и , из которых предпочтительней. При использовании , для создания большего количества , чем значение по умолчанию, Вы можете использовать опцию ; для того, чтобы Вы не исчерпали рекомендуется . Или же Вы можете сберечь , удалив большинство ненужных файлов. Команда по умолчанию создаст 360 на дискете 1.44МБ. Я считаю, что 120 вполне достаточно для моей текущей спасательной корневой дискеты, но если Вы включаете все устройства в каталог, Вы легко превысите 360. Использование сжатой корневой файловой системы позволяет создать большую файловую систему, и, следовательно, большее количество по умолчанию, но Вы все еще должны либо уменьшить число файлов, либо увеличить число .

Так что Ваша команда выглядит так:

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

Команда автоматически обнаружит доступное пространство и соответственно сконфигурируется. Параметр предотвращает от резервирования пространства для , и, таким образом, обеспечивает больше используемого пространства на диске.

Затем, примонтируйте устройство:

( Если каталог монтирования не существует — Вы должны создать его.) В следующих секциях, все имена каталогов назначения полагаются относительно .

Что такое initramfs?

Все 2.6 ядра Linux содержат архив формата с поддержкой gcipped, который извлекается в при загрузке ядра. После извлечения ядро ​​проверяет, содержит ли файл , и если он выполняет его как ПИД-код 1. Если он найден, этот процесс отвечает за то, что система оставила весь путь вверх, включая поиск и установку реальное корневое устройство (если оно есть). Если не содержит программу после того, как в нее будет извлечен встроенный архив , ядро ​​будет переходить к более раннему коду, чтобы найти и смонтировать корневой раздел, а затем выполнить какой-то вариант .

Все это отличается от старого initrd несколькими способами:

Поскольку это замечательный процесс (и включает удаление команд до их запуска), пакет klibc представил вспомогательную программу (utils / run_init.c), чтобы сделать все это для вас. Большинство других пакетов (например, busybox) назвали эту команду «switch_root».

Проверка

Через Web интерфейс

  1. LuCI → System → Mount Points должен быть показан раздел на внешнем USB устройстве подмонтированный как .
  2. LuCI → System → Software должно быть показано большее свободное пространство на overlay разделе.

Через командную строку

Раздел на внешнем USB устройстве должен быть подмонтирован как
Свободное пространство в корневом разделе должно быть равно пространству на .

# grep -e /overlay /etc/mtab
devsda1 overlay ext4 rw,relatime,data=ordered
overlayfs:overlay  overlay rw,noatime,lowerdir=,upperdir=overlayupper,workdir=overlaywork
 
# df /overlay /
Filesystem           1K-blocks      Used Available Use% Mounted on
devsda1              7759872    477328   7221104   6% overlay
overlayfs:overlay     7759872    477328   7221104   6% 

Запись образа img на SD-карту[править]

В любом Linux можно записать командой:

xzcat  <путь/до/образа.img.xz>| dd of=/dev/mmcblkX bs=4M status=progress

Также в версии alt-rootfs-installer 0.3.0 появилась возможность записывать образы img, img.gz, img.xz. Для этого вместо опции —rootfs= нужно указать —image-in=

alt-rootfs-installer --image-in=<путь/до/входного_образа.img> --media=/dev/mmcblkX --target=<цель>

Пример: запись образа regular-lxqt-20190213-aarch64.img.xz на /dev/mmcblkX для компьютера Orange Pi Prime:

alt-rootfs-installer --image-in=<regular-lxqt-20190213-aarch64.img.xz> --media=/dev/mmcblkX --target=orangepi_prime

Пример: запись образа slinux-rpi4-9.0-aarch64.img.xz на /dev/sdb для компьютера Raspberry Pi 4:

alt-rootfs-installer --image-in=slinux-rpi4-9.0-aarch64.img.xz --media=/dev/sdb

И наконец, если у вас Windows, то записать, предварительно разархивировав, можно программой .

Расширить корневой раздел на всё свободное местоправить

Начиная с версии 0.3.2 в alt-rootfs-installer появилась опция —resize. Она расширяет последний раздел на накопителе на всё оставшееся неразмеченное пространство. Поддерживаются разметки диска mbr и gpt.

Пример: запись образа slinux-rpi4-9.0-aarch64.img.xz на /dev/sdb для компьютера Raspberry Pi 4 с последующим расширением корневого раздела:

Предпосылка

В апреле 2009 года я предложил поместить /tmp в tmpfs (файловая система в ОЗУ) в Ubuntu серверах по умолчанию при определённых условиях, к примеру при большом количестве ОЗУ. Предложение получило тег approved, но по различным причинам вопрос повис в воздухе. Снова в 2016 году я предлагаю это улучшение в качестве обсуждения-бага в почтовых рассылках ubuntu-cloud и ubuntu-devel.

Плюсы /tmp в tmpfs:

  • Производительность. Чтение, запись и не нужность позиционировать головки над данными. Быстрота на скоростях ОЗУ.
  • Безопасность. Утечки данных предотвращены, особенно если ещё отключен swap. Так как /tmp обладает точкой монтирования ему добавлены параметры nosuid и nodev (админы могут добавить и noexec).
  • Энергоэффективность. Операции с диском более энергозатратны. Работа с ОЗУ менее энергозатратна.
  • Надёжность. Уменьшается запись в ячейки SSD.

Для честного разбора стоит отметить недостатки:

  • Может быть мало места (space) в ОЗУ, чем в корне /, где традиционно живёт /tmp.
  • Запись в tmpfs может вытеснить другую информацию.

Более подробно в Linux Kernel documentation tmpfs.txt.

Troubleshooting

  • Add option force_space in to allow installation of packets bigger than your partitions free space:
    echo option force_space >> /etc/opkg.conf
  • On Barrier Breaker, will create a file on extroot filled with uuid of mtd partition . At boot time when trying to do extroot, would try to check the actual uuid with the content of . If they did not match, extroot would fail. So if you want to continue use extroot after flashing a new firmwre, needs to be deleted first.
  • If the partition containing your extroot isn’t mounted during boot, but you can mount it without problems from a shell, you should try to increase . On my system I had to set it to 15 to get extroot working. Another hint to this being the culprit is having a working swap or other partitions mounted after booting, but not your extroot.

Заполнение initramfs:

Процесс сборки ядра 2.6 всегда создает архив initrfs с поддержкой gzipped cpio и связывает его с результирующим ядровым двоичным кодом. По умолчанию этот архив пуст (потребляет 134 байта на x86).

Конфигурационный параметр CONFIG_INITRAMFS_SOURCE (в общей настройке в menuconfig и проживающий в usr / Kconfig) может использоваться для указания источника архива initramfs, который будет автоматически включен в результирующий двоичный файл. Этот параметр может указывать на существующий архив cpio gzipped, каталог, в котором хранятся файлы для архивирования, или спецификация текстового файла, такая как следующий пример:

Запустите «usr / gen_init_cpio» (после сборки ядра), чтобы получить сообщение об использовании, документирующее вышеуказанный формат файла.

Одним из преимуществ файла конфигурации является то, что для доступа к полномочиям или для создания узлов устройства в новом архиве не требуется root-доступ

(Обратите внимание, что эти две примерные записи «файл» ожидают найти файлы с именем «init.sh» и «busybox» в каталоге под названием «initramfs» в каталоге linux-2.6. *

См. «Документация / раннее пользовательское пространство / README» для более подробно.)

Ядро не зависит от внешних инструментов cpio. Если вы укажете каталог вместо файла конфигурации, инфраструктура построения ядра создаст файл конфигурации из этого каталога (usr / Makefile вызывает scripts / gen_initramfs_list.sh) и переходит к пакетному каталогу с помощью файла конфигурации (путем подачи его на usr / gen_init_cpio, который создается из usr / gen_init_cpio.c). Код создания cpio для времени сборки ядра полностью автономный, а экстрактор времени загрузки ядра также (очевидно) автономный.

2.1 VFS

Все мы знаем, что Linux более совместим, потому что встроенное оборудование будет защищать базовое оборудование, требуя хорошей совместимости и высокой переносимости. Пользователям не нужно знать конкретную реализацию этих базовых файловых систем, что в основном связано с VFS (виртуальная файловая система). VFS имеет следующие характеристики:

  1. Обеспечивает стандартный интерфейс файловых операций вверх;
  2. Обеспечить единый стандартный интерфейс для всех файловых систем и ниже;
  3. VFS максимально абстрагирует некоторые сложные операции в VFS, что упрощает реализацию базовой файловой системы.

Что такое rootfs?

– это особый экземпляр (или , если он включен), который всегда присутствует в системах 2.6. Вы не можете отключить примерно по той же причине, что вы не можете убить процесс init; вместо того, чтобы иметь специальный код для проверки и обработки пустого списка, для ядра просто меньше и проще, чтобы убедиться, что определенные списки не могут стать пустыми.

Большинство систем просто монтируют другую файловую систему поверх и игнорируют ее. Количество пространства, которое пустует экземпляр ветвей, является крошечным.

Если * CONFIG_TMPFS * включен, будет использовать вместо по умолчанию. Чтобы заставить добавить в командную строку ядра.

Ускорение загрузки Linux

Начнем мы с оптимизации ядра 5 секунд, это не так много, но можно же еще улучшить. Мы не будем пересобирать ядро, хотя и это дало бы больший эффект, мы просто настроим его работу с помощью параметров загрузки.

Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:

Теперь приводим интересующую нас строчку к такому состоянию:

Разберем подробнее за что отвечает каждый параметр:

  • quiet — вывод, это долго, поэтому говорим ядру что на экран нужно выводить минимум информации
  • rootfstype=ext4 — указываем в какую файловую систему отформатирован корень. У меня ext4.
  • libahci.ignore_sss=1 — Ignore staggered spinup flag, ускоряет загрузку жестких дисков
  • raid=noautodetect — raid я не использую, думаю вы тоже поэтому отключаем.
  • selinux=0 — система полномочий selinux на домашней машине тоже ни к чему, без нее будет быстрее.
  • plymouth.enable=0 — заставка plymouth тоже занимает много времени, поэтому убираем заставку
  • lpj=12053560 — позволяет задать константу loops_per_jiffy, что позволит ядру не вычислять ее каждый раз и сэкономит до 250 миллисекунд. Это значение индивидуально для каждого компьютера.

Чтобы узнать значение последнего параметра выполните:

Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.

Также для указания корневого раздела желательно не использовать всякие там UUID, быстрее будет если написать прямо. Для того чтобы конфигуратор grub не использовал grub добавьте в тот же файл строчку:

Сохраните файл и обновим конфигурацию grub:

Проверяем, действительно ли установлены нужные опции:

Да, все правильно, перезагружаем компьютер, и смотрим что вышло:

Почти на одну секунду быстрее, и то хорошо. Возможно, у вас эффект будет намного лучше. Теперь идем разбираться с сервисами.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: