- Отмонтирование корневого раздела наживую
- Как перемонтировать файловую систему в режим чтения / записи?
- Удаленная замена корневой ФС в GNU/linux
- Задачи
- Прежде чем начать
- Решение
- В помощь.
- Инструменты пользователя
- Инструменты сайта
- Содержание
- fstab. Параметры монтирования блочных устройств
- Пример файла
- Формат строки
- filesystem
- options
- Определение файловой системы
- По именам устройств
- По меткам
- По UUID
- По меткам GPT
- По UUID GPT
- Дополнительная информация
- Автоматическое монтирование с systemd
- Пробелы в значениях полей
- Внешние устройства
- Параметры atime
- Запись в FAT32 с правами обычного пользователя
- Перемонтирование корневого раздела
Отмонтирование корневого раздела наживую
Однако, не могу сделать umount:
upd: ubuntu 16.04
ext4 давным давно умеет ресайзиться на ходу.
Ресайз в оффлайне требуется только в каких-то хитрых случаях.
. например в случае уменьшения раздела, проверки fsck или некоторого тюнинга. Ну хорош тупить. Без оффлайна никуда.
Кто-нибудь знает, как понять, почему оно не срабатывает? Initrd генерится корректный, но после ребута ничего не происходит. Как логгировать выхлоп initrd? Эти скрипты вообще отрабатывают и чего им не хватает? (ROOT я задал, локально оно работает).
Так он шринкнуть хочет.
З.ы. один раз делал нечто подобное по этой статье https://habr.com/post/141320/
Угу я сначала таким способом делал, через pivot_root. Повторил манипуляции несколько раз, на шаге «umount /mnt/oldroot» затык (см ОП) каждый раз. Через initrd тоже не удалось. Блин, что за черный ящик, нихрена непонятно, как посмотреть причину подвисания точки монтирования. loop девайсов, nfs шар, swap файлов — тоже нет. Гуру systemtap бы сюда.
Сказал местному админу, что бы дисков добавил, короче. Как тут с вашим линуксом удаленно управиться, я хз 🙂
Про тюнинг и fsck — это да. А вот про уменьшение — никогда не приходилось пробовать.
А lsof что-нибудь, может, говорит про oldroot?
не, так же молчит, ниодного упоминания
Я думаю, что подсказки нужно искать в «cat /proc/mounts» и в списке запущеных процессов.
fuse дает такой эффект
А перезагружаться по условиям челленжа можно?
Если да, то в grub’е переходишь в режим редактирования, в параметрах ядра указываешь break=premount, запускаешь загрузку. Она останавливается до этапа монтирования. В открывшемся шеле запускаешь vgchange -ay , затем временно монтируешь корневой раздел куда-нибудь, копируешь с него resize2fs к себе, вместе с библиотеками, которые будет просить при запуске. Потом отмонтируешь корневой раздел, и уже меняешь размер ФС на корневом разделе.
теперь я кажется понял, почему Отмонтирование корневого раздела наживую (комментарий) не срабатывал. надо делать vgscan;vgchange -ay. Ребутать можно, доступа физического нет.
На досуге надо будет вернуться, ибо сейчас решено тупо добавлением диска.
Источник
Как перемонтировать файловую систему в режим чтения / записи?
Я пытаюсь смонтировать файловую систему hfsplus в виртуальной машине Xubuntu 12.04 (версия ядра 3.2.0-23-generic), но при вводе mount -o remount,rw /dev/sdb3 в командной строке она возвращается not mounted or bad option . Любая помощь будет оценена.
Где mount/point это /partition/identifier «s соответствующие точка_монтирования, как указано с помощью следующей команды:
Например, скажем, что приведенная выше команда дает это:
Следующее будет правильным синтаксисом. (Мы начинаем с размонтирования, если оно уже смонтировано.)
для пользователей busybox / android:
вам нужно добавить пробел (в отличие от обычного использования) между remount и rw:
иначе это не сработает.
Запуск dmesg | grep hfs показал, что файловая система была размонтирована неправильно, которую я смог восстановить с помощью
Во-первых, давайте исправим проблемы NTFS (если у вас установлена двойная загрузка Ubuntu / Windows)
Перед монтированием нам нужен каталог (папка)
Теперь смонтируйте раздел
В этом случае «sda7» — это имя раздела. Теперь вы читаете и пишите в раздел.
У меня есть Dragonboard 410c, я подключаюсь через adb. Я хотел смонтировать физическую SD-карту как RW. следующее сработало для меня.
Теперь я могу получить к нему доступ в режиме rw как / storage / sdcard1
в северном направлении / storage / sdcard0 эмулируется и является / sdcard
Источник
Удаленная замена корневой ФС в GNU/linux
Иногда мне приходится сталкиваться с заменой корневой файловой системы. Имея загрузочный диск и доступ к серверу, это не сложно. Однако, я хочу поделиться опытом замены корневой ФС удаленно, через ssh, без перезагрузки.
Причины для замены коневой ФС бывают разные:
- перевод / в LVM
- перевод / в mdraid
- замена типа файловой системы (ext3 => btrfs)
- уменьшение размера ФС (resize2fs)
В качестве примера, я буду перемещать корневую ФС из /dev/sda2 в LVM
Описание буду проводить на примере gentoo GNU/linux.
Данный способ был проверен мной также и на debian GNU/linux.
Сразу оговорюсь, что не смотря на то, что у меня ни разу не было потери данных при этой операции, резервное копирование никто не отменял!
Есть удаленный сервер, размещенный в датацентре.
В моем случае, это будет хост система, с запущенными виртуальными машинами KVM.
Жесткий диск /dev/sda, где находится корневая ФС, разбит на три msdos раздела:
- sda1 200Мб /boot
- sda2 2Гб /
- sda3 197Гб LVM
Задачи
Прежде чем начать
— Мне понадобится утилита lsof. Необходимо установить ее до начала работ.
— Нужно понимать, что в процессе решения задачи нам потребуется перезапустить все процессы на сервере.
— Важно! Я пишу эту статью для тех, кто уже знаком с LVM и понимает, что при загрузке ядро не сможет самостоятельно замонтировать / без помощи initramfs!
Решение
1. Создаем новый логический том в LVM
Том будет размером 3Гб и называться root
lvcreate -L 3g -n root sys
2. Создаем папки для монтирования
mkdir /mnt/oldroot /mnt/newroot
3. Готовимся к перемонтированию старой корневой ФС / в режиме readonly
Это нужно для того, чтобы скопировать старую корневую ФС в новое место в консистентном состоянии.
Но сама ФС, скорее всего, сейчас используется процессами для записи данных.
3.1. Проверяем удаленные файлы
lsof / | grep ‘ DEL \|delete’
Если такие файлы нашлись, то процессы нужно перезапустить или остановить.
У меня такие файлы есть. Они возникли из-за того, что недавно были обновлены пакеты net-misc/openssh и sys-fs/lvm2
3.2. Перезапускаем и/или останавливаем процессы с удаленными файлами
В моем случае я перезапускаю sshd и завершаю dmeventd
/etc/init.d/sshd restart
3.3. Убеждаемся, что нет больше удаленных файлов
lsof / | grep ‘ DEL \|delete’
Убедились.
3.4. Проверяем открытые на запись файлы
lsof / | grep -v ‘ \(mem\|txt\|rtd\|cwd\) ‘
Смотрим на файлы, у которых режим открытия (колонка FD) содержит одну из букв: uUwW
В моем случае я не вижу проблем остановить все эти сервисы на время перемещения.
В вашем случае, решайте сами.
3.5. Останавливаем процессы, которые держат открытые файлы
/etc/init.d/rsyslog stop
3.6. Убеждаемся, что нет больше открытых на запись файлов
lsof / | grep -v ‘ \(mem\|txt\|rtd\|cwd\) ‘
3.7. Размонтируем все loop устройства
В моем случае я размонтирую squashfs файловую систему в /usr/portage
umount /usr/portage
3.8. Размонтируем ФС типа nfs, cifs, fuse и aufs
В моем случае таких нет.
3.9. Смотрим файловые (unix) сокеты
netstat —unix -a |grep ‘/\|Path$’
При переносе корневой ФС эти сокеты перестанут быть связанными со своими приложениями.
Это решается:
— предварительной остановкой этих приложений (рекомендуется)
— перезапуском этих приложений после подмены корневой ФС
Меня не пугает потеря связи с приложениями через эти сокеты.
4. Перемонтируем корневую ФС / в режим readonly
mount -n -o remount,ro /
Если все успешно, то команда завершится тихо.
Если же появится строка «mount: / is busy», то корневая ФС все еще занята. Возвращайтесь к пункту 3 и проверяйте. Возможно вы что-то забыли.
Не исключаю, что я тоже мог что-то не предусмотреть, но на данном этапе, если вам не удается этот шаг, то дальше двигаться нельзя. Вы еще ничего не успели изменить. Просто возвращайте в работу остановленные процессы.
Если же у вас все прошло успешно, то движемся дальше.
5. Резервное копирование (опционально)
Сейчас для этого самое время.
Для себя я не вижу в этом необходимости, т.к. после всей операции в качестве резервной копии останется старый раздел sda2.
Кроме того, у меня настроено ежедневное резервное копирование всех разделов хост системы и всех виртуальных машин.
6. Копируем корневую ФС с устройства sda2 в LVM том root
dd if=/dev/sda2 of=/dev/sys/root bs=8M
7. Изменяем размер ФС
7.1. Первоначально проверяем ФС на ошибки
fsck -fC /dev/sys/root
fsck from util-linux 2.20.1
7.2. Производим изменение размера ФС
В нашем случае, мы увеличиваем ФС до размеров LVM тома.
resize2fs -p /dev/sys/root
8. Монтируем копию
mount -n /dev/sys/root /mnt/newroot
9. Подменяем корневую ФС
Это то, ради чего я все это затеял.
С этого момента наступает опасное время.
Важно: После подмены корневой ФС, если произойдет обрыв SSH сессии, то система не сможет установить новое соединение!
Подменяем ФС:
cd /mnt/newroot
Важно выполнить именно эти две команды в том виде, в котором они написаны, чтобы избежать блокировок из-за текущей рабочей папки (cwd).
После этой команды, том /dev/sys/root встанет на место /, а раздел sda2 сменит точку монтирования в /mnt/oldroot. При этом все другие замонтированные ФС тоже сменят точку монтирования. Например, файловая система /dev переместится в /mnt/oldroot/dev.
10. Возврщаем точки монтирования всех остальных ФС (кроме старой корневой ФС)
Переносим стандартные ФС, которые есть у большинства:
mount -n —move /mnt/oldroot/proc /proc
mount -n —move /mnt/oldroot/dev /dev
mount -n —move /mnt/oldroot/sys /sys
Теперь можно смотреть в /proc/mounts, что еще нужно вернуть на место
cat /proc/mounts |grep oldroot
В моем примере, я переношу
mount -n —move /mnt/oldroot/lib64/rc/init.d /lib64/rc/init.d
mount -n —move /mnt/oldroot/var/distfiles /var/distfiles
mount -n —move /mnt/oldroot/var/db /var/db
С этого момента вы вне опасности. Новые SSH сессии должны успешно открываться.
11. Перезапускаем приложения с новой корневой ФС
11.1. Смотрим, файлы процессов
lsof /mnt/oldroot
Видим, что все процессы запущены со старой корневой ФС.
11.2. Начинаем перезапускать системные процессы
Я рекомендую в первую очередь:
/etc/init.d/udev restart
/etc/init.d/sshd restart
11.3. Открываем вторую ssh сессию на сервер
Если вход успешен, то первую сессию нужно завершить, для того чтобы закрыть старую оболочку bash и форк старой sshd.
смотрим lsof /mnt/oldroot
все sshd процессы, запущенные со старой корневой ФС должны исчезнуть.
11.4. Необычные процессы.
Перезапускаем agetty и init
С agetty (или другими *tty) все просто:
killall agetty
Не стоит бояться, init их перезапустит
Cам init перезапускаем командой
telinit u
11.5. Монтируем файловые системы, отключенные ранее
Я монтирую squashfs в /usr/portage
mount /usr/portage
11.6. Запускаем остановленные ранее сервисы
В моем случае я запускаю:
/etc/init.d/rsyslog start
11.7. Продолжаем перезапускать сервисы
смотрим lsof /mnt/oldroot, и перезапускаем, что осталось
/etc/init.d/ntpd restart
/etc/init.d/radvd restart
/etc/init.d/smartd restart
/etc/init.d/dnsmasq restart
В том числе, я перезапускаю виртуальные машины, которые все это время спокойно работали.
Более того, теперь уже нет особой надобности торопиться.
Мы перезапускаем сервисы, только чтобы размонтировать старую корневую ФС.
/etc/init.d/kvm.204 restart
/etc/init.d/kvm.205 restart
/etc/init.d/kvm.206 restart
12. Операции после подмены корневой ФС
12.1. Не забываем изменить fstab
Я пользуюсь метками LABEL=, поэтому ничего не меняю
12.2. Размонтируем старую корневую ФС
umount /mnt/oldroot
rmdir /mnt/oldroot /mnt/newroot
Она больше никем не используется
Для тех, кто хочет сохранить старую корневую ФС, я рекомендую поменять у нее LABEL и UUID, чтобы она не путала загрузчик.
tune2fs -L oldroot -U $(uuidgen) /dev/sda2
Для себя, я больше не вижу необходимости в старой ФС. Удаляю.
wipefs /dev/sda2 -o 0x438
12.3. Не забываем добавить/изменить initramfs, при переходе на LVM
12.4. Не забываем переконфигурировать загрузчик
В моем случае это grub2
Устанавливаем загрузчик на sda
grub2-install —no-floppy /dev/sda
Источник
В помощь.
Инструменты пользователя
Инструменты сайта
Содержание
fstab. Параметры монтирования блочных устройств
Файл /etc/fstab используется для настройки параметров монтирования различных блочных устройств, разделов на диске и удаленных файловых систем.
Пример файла
Простой пример /etc/fstab , в котором файловые системы заданы по именам файлов устройств:
Формат строки
Каждая строка в файле /etc/fstab содержит следующие поля, разделенные пробелами или символами табуляции:
filesystem
Физическое место размещения файловой системы, по которому определяется конкретный раздел или устройство хранения для монтирования.
Точка монтирования, куда монтируется корень файловой системы.
Тип файловой системы. Поддерживается множество типов: ext2, ext3, ext4, btrfs, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap и auto. При выборе auto команда mount попытается определить реальный тип файловой системы самостоятельно. Это полезно для компакт-дисков (CD/DVD).
options
Параметры монтирования файловой системы. Подробнее смотрите на man странице mount. Обратите внимание, что некоторые параметры относятся к конкретным типам файловых систем.
Опция | Значение |
---|---|
auto | Файловая система монтируется при загрузке автоматически или после выполнения команды ‘mount -a‘. |
noauto | Файловая система может быть смонтирована только вручную. |
exec | Позволяет исполнять бинарные файлы на разделе диска. Установлено по умолчанию. |
noexec | Бинарные файлы не выполняются. Использование опции на корневой системе приведёт к её неработоспособности. |
ro | Монтирует файловую систему только для чтения. |
rw | Монтирует файловую систему для чтения/записи. |
sync | Все операции ввода-вывода должны выполняться синхронно. |
async | Все операции ввода-вывода должны выполняться асинхронно. |
user | Разрешает любому пользователю монтировать файловую систему. Применяет опции noexec, nosuid, nodev, если они не переопределены. |
nouser | Только суперпользователь может монтировать файловую систему. Используется по умолчанию. |
defaults | Использовать значения по умолчанию. Соответствует набору rw, suid, dev, exec, auto, nouser, async. |
suid | Разрешить операции с suid и sgid битами. В основном используются, чтобы позволить пользователям выполнять бинарные файлы со временно приобретёнными привилегиями для выполнения определённой задачи. |
nosuid | Запрещает операции с suid и sgid битами. |
nodev | Данная опция предполагает, что на монтируемой файловой системе не будут созданы файлы устройств (/dev). Корневой каталог и целевая директория команды chroot всегда должны монтироваться с опцией dev или defaults. |
atime | Включает запись информации о последнем времени доступа (atime) при каждом чтении файла. Включено по умолчанию на Linux до v.2.6.29 включительно. |
noatime | Отключает запись информации о последнем времени доступа (atime) при каждом чтении файла. |
relatime | Включает запись информации о последнем времени доступа при чтении файла, если предыдущее время доступа (atime) меньше времени изменения файла (ctime). Включено по умолчанию на Linux начиная с v.2.6.30. |
acl | Включить обработку ACL для раздела |
Используется утилитой dump для определения того, нужно ли создать резервную копию данных в файловой системе. Возможные значения: 0 или 1. Если указано число 1, dump создаст резервную копию. У большинства пользователей утилита dump не установлена, поэтому им следует указывать 0 в этом поле.
Используется программой fsck для определения того, нужно ли проверять целостность файловой системы. Возможные значения: 0, 1 или 2. Значение 1 следует указывать только для корневой файловой системы (с точкой монтирования /); для остальных ФС, которые вы хотите проверять, используйте значение 2, которое имеет менее высокий приоритет.Обратите внимание, что в случае btrfs следует всегда указывать 0, даже если эта файловая система используется в качестве корневой. Файловые системы, для которых в поле указано значение 0, не будут проверяться fsck.
Определение файловой системы
Конкретное место расположения файловой системы может быть определено различными способами. В файле /etc/fstab можно указать имя файла устройства, его метку или UUID (в том числе GPT-метку и GPT-UUID для дисков GPT). Определение по UUID является наиболее предпочтительным способом. Далее приведены примеры определений файловых систем с использованием каждого из способов. Вывод lsblk -f and blkid для этих примеров вы можете найти на странице Persistent block device naming.
По именам устройств
Запустите lsblk -f , чтобы отобразить список разделов. Укажите имена устройств с префиксом /dev/ :
По меткам
Запустите lsblk -f , чтобы отобразить список разделов. Укажите метки из столбца LABEL с префиксом LABEL= :
По UUID
Запустите lsblk -f, чтобы отобразить список разделов. Укажите идентификаторы из столбца UUID с префиксом UUID= :
Совет: Если вы хотите отобразить только UUID конкретного раздела, используйте команду lsblk -no UUID /dev/sda2.
По меткам GPT
Запустите blkid чтобы отобразить список разделов. Укажите значения PARTLABEL без кавычек:
По UUID GPT
Запустите blkid чтобы отобразить список разделов. Укажите значения PARTUUID без кавычек:
Дополнительная информация
Автоматическое монтирование с systemd
Если у вас большой раздел /home, вы можете разрешить службам, которые не обращаются к /home, запускаться в то время, как /home проверяется программой fsck. Для этого добавьте следующие параметры монтирования в запись /etc/fstab для точки монтирования /home:
При этом процедура проверки и монтирования /home будет запущена только при первой попытке доступа, и ядро будет держать в ожидании все создаваемые потоки ввода-вывода в /home, пока раздел не будет смонтирован.
Обратите внимание: Ускорение при автоматическом монтировании /home может составлять не более секунды-двух, в зависимости от конфигурации вашей системы. При этом разделу /home будет присвоен тип файловой системы autofs, который по умолчанию игнорируется mlocate. Используйте эту возможность с осторожностью.
Автоматическое монтирование может аналогичным образом использоваться и для монтирования удаленных файловых систем. В дополнение, вы можете использовать параметр x-systemd.device-timeout=# для указания времени ожидания удаленной файловой системы при перебоях в соединении.
Обратите внимание: Если вы намереваетесь использовать флаг exec при автоматическом монтировании, вам следует удалить флаг user, чтобы монтирование производилось корректно.
Если у вас имеются зашифрованные файловые системы, вы можете также добавить параметр noauto в соответствующие записи в /etc/crypttab . Тогда systemd не будет пытаться открыть зашифрованное устройство во время загрузки системы, а сделает это при первой попытке доступа к файловой системе на этом устройстве, применив указанный файл ключа и затем автоматически смонтировав ФС. Это может дать выигрыш в несколько секунд при загрузке системы, например, если у вас зашифрованный RAID массив: systemd не придется ожидать готовности устройства.
Пробелы в значениях полей
Так как пробельные символы используются в fstab для разделения полей, их нельзя напрямую использовать в значениях полей. Любые пробелы в полях (например, значения PARTLABEL, LABEL или точки монтирования) должны быть заменены специальными управляющими последовательностями, которые состоят из обратной косой черты (\) и трех восьмеричных цифр (например, для пробела это \040):
Внешние устройства
Если устройство не подключено постоянно, и может отсутствовать во время загрузки системы, монтируйте его с параметром nofail. Это предотвратит появление ошибок при загрузке.
Параметры atime
Обратите внимание: Действие noatime перекрывает собой nodiratime. Нет необходимости указывать оба параметра.
Запись в FAT32 с правами обычного пользователя
Чтобы иметь возможность записи в разделе FAT32, вам следует указать правильные параметры монтирования в вашем файле /etc/fstab.
Флаг user означает, что любой пользователь сможет монтировать и размонтировать раздел /dev/sdX . Параметр rw дает доступ на чтение-запись; umask убирает указанные права — например, umask=111 удаляет права на выполнение. Проблема в том, что права на «выполнение» также удаляются у каталогов, поэтому мы должны исправить это при помощи параметра dmask=000 .
Без этих параметров все файлы будут восприниматься исполняемыми. Вы можете использовать параметр showexec вместо umask и dmask, при которой исполняемыми будут файлы, имеющие расширения исполняемых файлов Windows (.com, .exe, .bat).
Например, если ваш раздел FAT32 на /dev/sda9, и вы хотите смонтировать его в каталог /mnt/fat32, то вам следует использовать запись следующего вида:
Перемонтирование корневого раздела
Если по какой-то причине корневой раздел был неправильно смонтирован только на чтение, вы можете перемонтировать его с доступом на чтение-запись без перезагрузки, набрав
Источник