Вопрос или проблема
У меня есть виртуальная машина Ubuntu на VirtualBox с виртуальным диском, который монтируется как файловая система только для чтения. Я не уверен, почему это происходит, и мои попытки перемонтировать как чтение/запись не сработали.
Одно из последних действий, которые я совершил перед переходом в режим “только для чтения”, было увеличение размера диска. Я сделал следующее:
- использовал
VBoxManage modifymedium —resize
(с хост-системы Mac) для увеличения образа диска VM, - загрузил гостевую систему с ISO GParted и использовал его, чтобы присоединить новое пространство к существующему основному разделу,
- нормально загрузил гостевую систему, затем
- выполнил
lvresize
иresize2fs
, чтобы расширить файловую систему в новое пространство.
Это был второй раз, когда я делал это, и казалось, что все работает нормально. Я запустил на машине процесс, который занял много места. Это было последнее успешное действие, которое я помню, прежде чем столкнулся с этой проблемой режима только для чтения.
Я не вижу ничего в dmesg, что, как мне кажется, связано с проблемами файловой системы или причинами перехода в режим только для чтения. Я вижу следующее:
[ 1.809918] EXT4-fs (dm-0): файловая система смонтирована в режиме с упорядоченными данными. Опции: (null)
[ 2.230023] Добавление 524284k свопа на /dev/mapper/trails-swap_1. Приоритет:-1 размеры:1 на 524284k
[ 2.242615] EXT4-fs (dm-0): переподмонтирована. Опции: errors=remount-ro
/proc/cmdline показывает ту же команду.
Я пробовал различные комбинации параметров для команды mount, например:
$ sudo mount -o remount,rw
$ sudo mount -o remount,rw /dev/mapper/trails-root
$ sudo mount -o remount,rw -t ext3 /dev/sda5 /
Не уверен, что я должен искать, но вывода от этих действий не получаю.
Загрузка в режиме восстановления и выполнение fsck проходит без проблем.
Если я захожу в опции GRUB при загрузке и удаляю “ro”, я все равно оказываюсь в режиме только для чтения.
fdisk сообщает, что два моих LVM-объема на увеличенном разделе не содержат валидных таблиц разделов.
Вот вывод некоторых команд, которые могут быть полезны:
$ sudo more /etc/fstab
# /etc/fstab: статическая информация о файловой системе.
#
# Используйте 'blkid', чтобы напечатать универсально уникальный идентификатор для
# устройства; это может быть использовано с UUID= как более надежный способ наименования устройств,
# который работает даже если диски добавляются и удаляются. См. fstab(5).
#
# <файловая система> <точка монтирования> <тип> <опции> <дамп> <проверка>
/dev/mapper/trails-root / ext3 errors=remount-ro 0 1
/dev/mapper/trails-swap_1 none swap sw 0 0
proc /proc proc defaults 0 0
$ fdisk -l
Диск /dev/sda: 59.1 GB, 59055800320 байтов
255 головок, 63 сектора/дорожка, 7179 цилиндров, всего 115343360 секторов
Единицы = сектора по 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байтов / 512 байтов
Размер ввода/вывода (минимальный/оптимальный): 512 байтов / 512 байтов
Идентификатор диска: 0x0005deaa
Устройство Загр. Начало Конец Блоки Идентификатор Система
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 501758 115343359 57420801 5 Расширен
/dev/sda5 501760 115343359 57420800 8e Linux LVM
Диск /dev/mapper/trails-root: 58.3 GB, 58258882560 байтов
255 головок, 63 сектора/дорожка, 7082 цилиндров, всего 113786880 секторов
Единицы = сектора по 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байтов / 512 байтов
Размер ввода/вывода (минимальный/оптимальный): 512 байтов / 512 байтов
Идентификатор диска: 0x00000000
Диск /dev/mapper/trails-root не содержит валидной таблицы разделов
Диск /dev/mapper/trails-swap_1: 536 MB, 536870912 байтов
255 головок, 63 сектора/дорожка, 65 цилиндров, всего 1048576 секторов
Единицы = сектора по 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байтов / 512 байтов
Размер ввода/вывода (минимальный/оптимальный): 512 байтов / 512 байтов
Идентификатор диска: 0x00000000
Диск /dev/mapper/trails-swap_1 не содержит валидной таблицы разделов
$ sudo pvdisplay
--- Физический объем ---
PV Имя /dev/sda5
VG Имя trails
PV Размер 54.76 GiB / неиспользуемо 2.81 MiB
Выделяемое да (но заполнено)
PE Размер 4.00 MiB
Всего PE 14018
Свободный PE 0
Выделенный PE 14018
PV UUID ew9UUW-fJbf-I4o1-otM3-Rpeg-nyK6-0Hn0ol
/etc/lvm/cache/.cache.tmp: не удалось открыть: На устройстве нет свободного места
$ sudo vgdisplay
--- Группа томов ---
VG Имя trails
ID системы
Формат lvm2
Области с метаданными 1
Последовательный номер метаданных 9
Доступ к VG чтение/запись
Состояние VG расширяемая
Макс LV 0
Техн. LV 2
Открыт. LV 2
Макс PV 0
Техн. PV 1
Действ. PV 1
VG Размер 54.76 GiB
PE Размер 4.00 MiB
Всего PE 14018
Назначены PE/Размер 14018 / 54.76 GiB
Свободные PE/Размер 0 / 0
VG UUID wZqfAM-DgIg-Z1P1-TSqi-iycL-O2pL-s2x8fU
Не удалось создать временное имя архива.
Архив метаданных группы томов "trails" не удался.
Не удалось создать временное имя текста файла.
Резервное копирование метаданных группы томов trails не удалось.
/etc/lvm/cache/.cache.tmp: не удалось открыть: На устройстве нет свободного места
$ sudo lvm
lvm> lvs
LV VG Призн. LSize Изместно Снап% Лог Копия% Конверт
root trails -wi-ao 54.26g
swap_1 trails -wi-ao 512.00m
$ sudo lvdisplay
--- Логический том ---
LV Имя /dev/trails/root
VG Имя trails
LV UUID cfACOE-8PCl-jZye-dIZW-KOaS-dnOD-RwO8Ek
Доступ к LV чтение/запись
Состояние LV доступен
# открытий 1
LV Размер 54.26 GiB
Текущий LE 13890
Сегменты 2
Распределение наследовать
Предварительное чтение секторов авто
- в настоящее время установлено 256
Блочное устройство 252:0
--- Логический том ---
LV Имя /dev/trails/swap_1
VG Имя trails
LV UUID EqcxJH-jOdB-NLIW-fDNi-vWn4-nWbe-feFRM6
Доступ к LV чтение/запись
Состояние LV доступен
# открытий 2
LV Размер 512.00 MiB
Текущий LE 128
Сегменты 1
Распределение наследовать
Предварительное чтение секторов авто
- в настоящее время установлено 256
Блочное устройство 252:1
/etc/lvm/cache/.cache.tmp: не удалось открыть: На устройстве нет свободного места
Достаточно? (Слишком много?)
Я не уверен, куда идти дальше. Большое спасибо за любую помощь!
Я достиг предела inode.
$ tune2fs -l /dev/mapper/trails-root | grep -i inode
...
Количество индексов: 3549600
Свободные индексы: 0
...
Ответ или решение
Определение проблемы и теоретическое обоснование
Вы столкнулись с ситуацией, при которой файловая система в вашей виртуальной машине Ubuntu на VirtualBox перешла в режим только для чтения. Это обычно происходит, когда система обнаруживает критическую ошибку, такую как переполнение дискового пространства, ошибки в файловой системе, либо исчерпание inode. В данном случае, вы обнаружили, что проблема возникла из-за исчерпания лимита inodes.
В файловых системах типа EXT (например, ext3, ext4), inodes используются для управления метаданными файлов. Каждому файлу и каталогу на диске соответствует один inode, который содержит такую информацию, как права доступа, временные метки и местоположение данных на диске. Исчерпание inodes означает, что система не может создать новые файлы или каталоги, даже если доступно свободное место на диске.
Пример и его анализ
Как вы упомянули, вы расширили виртуальный диск с помощью VBoxManage modifymedium —resize
, что привело к успешному увеличению размера LVM через lvresize
и resize2fs
. Однако после этого файловая система была заполнена, что, возможно, стало причиной создания множества мелких файлов, израсходовавших все доступные inodes.
Команда tune2fs -l /dev/mapper/trails-root | grep -i inode
подтвердила ваши опасения, показав, что свободных inodes нет. Система автоматически переключилась в режим монтирования только для чтения (зачастую с опцией errors=remount-ro
), чтобы предотвратить потерю данных.
Решение и его применение
-
Очистка файловой системы: Прежде всего, необходимо удалить ненужные файлы, чтобы освободить немного inodes. Используйте команду
find /path/to/search -xdev -type f | wc -l
для учета файлов илиdf -i
для проверки использования inodes. -
Оптимизация настроек создания inodes: В случае если вы часто сталкиваетесь с исчерпанием inodes, пересмотрите структуру файлов. Убедитесь в том, что корневая и вспомогательные директории содержат меньше локальных и временных файлов. Возможно, имеет смысл реорганизовать данные.
-
Перемонтирование файловой системы: После освобождения inodes, попытайтесь размонтировать (
umount
) и заново смонтировать filesytem с опциями для чтения и записи. -
Проверка целостности файловой системы: Выполните
fsck
для проверки и исправления ошибок в файловой системе. Возможно, потребуется это сделать через Live-режим или через консоль восстановления. -
Рассмотрите возможность использования отдельных файловых систем для данных и логов: В некоторых случаях возможно более гибкое распределение inodes, создав отдельные разделы для данных, что может предотвратить исчерпание inodes пользовательной файловой системы.
Меры, принятые выше, помогут вам восстановить нормальную работу вашей виртуальной машины и избежать подобных проблем в будущем. При этом, важно тщательно проводить мониторинг файловой системы и регулярно проверять как доступное место, так и количество свободных inodes.