
Итак, длинная история: есть виртуальная машина SVN (сервер vmware), на которой закончилось место. Я не могу выполнить коммит, потому что он говорит, что места нет. К виртуальной машине подключен один виртуальный диск на 80 ГБ (hda), раздел /boot и большая VG (VolGroup00) для /
Я архивирую и удаляю старые репозитории SVN с диска, но свободного места не возвращается. Что мне нужно сделать, чтобы это место снова стало доступным для использования? Я использую Linux почти для всего, но никогда не игрался с LVM достаточно, чтобы понять, что происходит.
вывод vgdisplay:
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.41 GB
PE Size 32.00 MB
Total PE 2381
Alloc PE / Size 2380 / 74.38 GB
Free PE / Size 1 / 32.00 MB
VG UUID dPSZpL-kFBn-HpkH-ChfO-dw9q-YGg2-qHOiQF
Со вчерашнего дня место освободилось...
Вывод df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
72G 67G 959M 99% /
/dev/hda1 99M 15M 80M 16% /boot
tmpfs 62M 0 62M 0% /dev/shm
Вывод lvs
LV VG Attr LSize Origin Snap% Move Log Copy%
LogVol00 VolGroup00 -wi-ao 73.38G
LogVol01 VolGroup00 -wi-ao 1.00G
Что-то все равно кажется странным, поскольку указано 959 МБ свободной памяти, а при размере 72 Гб используется 67 Гб...
Итак, теперь я освобождаю место, удаляя репозитории... и все же равновесие во вселенной еще не восстановлено...
решение1
Удаление файлов не изменяет размер логического тома (и, соответственно, не влияет на свободное место в группе томов).
Группу томов можно представить как «виртуальный диск», а логические тома на ней — как разделы, но с ними гораздо проще работать (изменять размер, создавать, удалять), чем с обычными разделами.
Как говорит Камил, если вы получаете ошибки "out of space" во время работы, то это не LVM, который напрямую виноват — это простая ошибка файловой системы, и вы можете определить, в какой файловой системе не хватает места с помощью df -h
, и удаление достаточного количества вещей в этой файловой системе в конечном итоге даст вам больше места. Однако с LVM, если у вас есть файловая система с кучей свободного места и другая без него, вы можете сжать LV с большим количеством свободного места, а затем выделить это пространство LV, на котором закончилось место, и, следовательно, использовать выделенный вам диск более эффективно.
Процесс сжатия и расширения файловых систем немного рискован (поэтому делайте резервные копии), а этап сжатия должен выполняться на размонтированных файловых системах (поэтому переход в однопользовательский режим хорош, и вы не можете сжать корневую файловую систему; если ваши файловые системы это поддерживают (XFS, reiser, последние ext2/3), вы можете выполнить расширение в режиме онлайн). В общем, процесс выглядит следующим образом:
- Сократите файловую систему, из которой вы хотите удалить пространство, до размера, немного меньшего, чем тот, который вы хотите получить в итоге (например,
resize2fs /dev/mapper/VolGroup00-largeLV xG
). Причина, по которой вы сжимаете ее до немного меньшего размера, заключается в том, что если вы ошибетесь в математике и сократите LV меньше файловой системы, вы ее забьете. - Уменьшите LV, из которого вы хотите удалить пространство, до нужного вам размера (
lvresize -L xG VolGroup00/largeLV
) - Увеличьте файловую систему на этом LV до нового размера LV:
resize2fs /dev/mapper/VolGroup00-largeLV
- Увеличьте слишком маленький LV до нового, большего размера:
lvresize -L+nG VolGroup00/smallLV
- Увеличьте файловую систему на слишком маленьком логическом томе до нового, большего размера:
resize2fs /dev/mapper/VolGroup00-smallLV
И теперь у вас везде должно быть достаточно места.
Несколько советов:
lvs
перечислит все ваши LV вместе с их размерамиvgs
быстро отобразит все размеры ваших VG и свободное пространство- Если ваш раздел подкачки находится на LVM, то это часто хорошее место, чтобы получить немного временного свободного места, если машина не слишком загружена.
Удачи!
решение2
/dev/sda локальный или на SAN? Если на SAN, то есть надежда. Если он локальный и использует все доступное пространство, вам придется освободить часть дискового пространства, удалив файлы.
Обновите вопрос и сообщите нам статус.
Редактировать
Ах, это виртуальная машина! Вам повезло (если на хостовой машине есть свободное место).
Создайте еще один виртуальный диск в менеджере ВМ, который будет иметь такой же размер, как и свободное пространство. Затем предоставьте этот образ диска ВМ.
Убедитесь, что виртуальная машина видит его (используйте dmesg, чтобы проверить, отображается ли он). Если это так, выполните fdisk и создайте один раздел.
Проблема
pvcreate /dev/whatever1
Где "что угодно" - это, очевидно, устройство. Вероятно, sdb. 1 - это раздел, который вы только что создали. У него не должно возникнуть проблем с созданием этого физического тома.
Теперь беги
vgextend VolumeGroupName /dev/whatever1
Вы можете использовать vgdisplay, чтобы проверить, что в группе томов теперь есть свободное место. Теперь увеличьте логический том:
lvextend -l +100%FREE
Это должно расширить логический том для заполнения группы томов.
Теперь самое сложное. Если у вас файловая система ext3, вы сможете изменять размер в режиме реального времени, на лету:
resize2fs /dev/volgroup/logicalvolume
(где volgroup и logicalvolume — это фактический путь к тому, что смонтировано в /)
Он сообщит, что выполняет динамическое изменение размера, поскольку том смонтирован, и вуаля, запуск df -h должен показать, что у вас есть свободное место.
решение3
Объем свободного места в вашей группе томов не изменится. Все это выделяется файловой системой, в которой вы ее отформатировали. Удаление файлов приведет только к удалению их записей inode из файловой системы, но файловая система по-прежнему будет претендовать на это пространство.
Единственный способ освободить место в группе томов — изменить размер или удалить логические тома.
Но то, что вы описываете, звучит так, будто у вас просто закончилось место на диске. Вам следует проверить вывод df -h
в вашей виртуальной машине и посмотреть, сколько свободного места на томе, где находится репозиторий.
решение4
Попробуйте перезапустить сервер SVN. Если удаление файлов не освобождает место, они должны все еще использоваться каким-то образом. Это происходит и с активными журналами. У меня однажды был журнал, который рос на 10 МБ в час, поэтому довольно скоро мне пришлось удалить журнал, но это не освободило место, пока я не перезапустил демон, который извергал данные в этот журнал.
EDIT: Я посмотрел, почему это происходит. Кажется, linux/unix считает ссылки на файлы, поэтому их можно удалить, пока они не будут освобождены всеми процессами, которые их открыли.