Предположим есть папка /MY и в ней лежит 10Gb мусора. Потом к ней примонтировали раздел "mount /dev/gpt/test /MY"Мусор скрыт за примонтированной ширмой. Предположим переполнение root раздела.
Причины по которым это произошло не важны. Необходимо решение задачки "Найти и уничтожить"А теперь вопросы:
1. Как обнаружить вот эти 10G мусора?
2. Как удалить этот мусор.Все было бы достаточно просто, но при этом нельзя проводить размонтирование /MY и перегружать сервер.
:(
Спасибо за помощь.
Замонтировать ридонли в другом месте переполненный раздел и искать там.
> Замонтировать ридонли в другом месте переполненный раздел и искать там.Когда найдёшь, читай в сторону mount bind нужного каталога. Там и удалить сможешь.
> Замонтировать ридонли в другом месте переполненный раздел и искать там.получит filesystem busy
ну как бы, допустим есть "/" - root fs и на ней директория /tmp
/tmp - не пуста. И есть еще размеченная пустая партиция с ufs.
Монтируем ее в /tmp.
Все что в /tmp теперь скрыто.
> получит filesystem busyКогда / уже переполнен, никто не будет возражать на ребут и тд.
А вот чуть-чуть заранее всё отработает как надо.
> Когда / уже переполнен, никто не будет возражать на ребут и тд.Рассматриваем вариант близкий к переполнению. Система еще живая, доступ удаленный и другие радости. Перегружать не вариант.
На данный момент интересует решение задачи на будущее. Задачка на первый взгляд элементарная. Я столкнулся случайно с подобной ситуацией и решил что не знаю чего то элементарного. Но похоже дело не в этом. Неужели решения нет.
>> получит filesystem busy
> Когда / уже переполнен, никто не будет возражать на ребут и тд.
> А вот чуть-чуть заранее всё отработает как надо.если /tmp, /var, /usr на одной fs == "/", вариантов нет.
если /var, /usr на отдельных fs - можно жить дальше.Даже если кто-то возражает, вариантов нет.
> если /tmp, /var, /usr на одной fs == "/", вариантов нет.
> если /var, /usr на отдельных fs - можно жить дальше.
> Даже если кто-то возражает, вариантов нет.Да, все FS отдельно, это железное правило. И система действительно живет.
Но в случае если какой то скрипт рабочей областью опирается на root, то его ждет разочарование. Согласен, писать на root крайне нежелательно.
Всем спасибо.
Да, получит "Device busy"Lavr, спасибо за расшифровку задачки, так наверное понятнее выглядит.
Но решения так и нет. Может его не существует?
> Да, получит "Device busy"
> Lavr, спасибо за расшифровку задачки, так наверное понятнее выглядит.
> Но решения так и нет. Может его не существует?я навскидку не могу придумать.
с некоторыми точками монтирования, требуется сперва хорошо подумать.
Как пример: /tmp - внутри FS="/", я бы не стал монтировать в /tmp,
а создал бы /tmp/mnt и туда смонтировал, доступность /tmp сохранена.
> Да, получит "Device busy"
> Lavr, спасибо за расшифровку задачки, так наверное понятнее выглядит.
> Но решения так и нет. Может его не существует?попробовал через mount_nullfs - работает и удалять позволяет.
Проверяю. Неужели получилось.
> попробовал через mount_nullfs - работает и удалять позволяет.А у меня не получается.
При попытке монтирования root раздела в любую папку получаю "are not distinct paths"
Но даже при пробах не root раздела получил фокус!!!
Пусть есть папки /mnt/var и /mnt/mynull. Пусть есть чем то заполненный раздел /dev/gpt/test
Копирую в папку /mnt/var несколько папок и файлов. Полигон готов.
Монтирую nullfs "mount_nullfs /mnt/var /mnt/mynull"
Проверяю, да все как и нужно, в папке /mnt/mynull вижу то же что и /mnt/var - несколько папок и файлов.
Монтирую раздел "mount /dev/gpt/test /mnt/var"
Проверяю mynull. Да все как и нужно, в папке /mnt/mynull вижу несколько папок и файлов, как и ранее. А в папке /mnt/var вижу примонтированный раздел.
Пробую удалять создавать в папке mynull - все отлично удаляет и создает.
Похоже получилось но....Если изменить порядок то ничего не получается:
Монтирую раздел "mount /dev/gpt/test /mnt/var"
Монтирую nullfs "mount_nullfs /mnt/var /mnt/mynull"
И теперь в /mnt/mynull вижу уже содержимое примонтированного раздела. То бишь - все в пустую.Тестирую на FreeBSD 9.1-RELEASE-p1 (да, старенькая)
1. Прошу проверить возможность монтирования именно корневого раздела.
2. Прошу проверить монтирование nullfs уже после монтирования раздела.
Если получится прошу дать листинг команд, может я заблудился в трех соснах.
Спасибо.
>> попробовал через mount_nullfs - работает и удалять позволяет.
> А у меня не получается.
> Тестирую на FreeBSD 9.1-RELEASE-p1 (да, старенькая)
> 1. Прошу проверить возможность монтирования именно корневого раздела.
> 2. Прошу проверить монтирование nullfs уже после монтирования раздела.
> Если получится прошу дать листинг команд, может я заблудился в трех соснах.отписал.
Взял за основу все на корне "/", там отдельно монтируется /usr/ports - можно
не обращать внимания.
создал три файла по 500MB - заполнил /tmp
далее выполнил fsck на партицию которую буду монтировать
в /tmp
монтирую mount /dev/ada1p1 /tmp
теперь все что ранее создано в /tmp недоступно
делаем доступным (монтируем корень в /mnt):
# mount_nullfs / /mnt
# ls -la /mnt/tmp - все доступно
# rm -rf /mnt/tmp/*
# umount /mnt
все
Предложу точно рабочий, но сложный путь. Написать утилиту которая откроет блочное устройство в ro, просканирует все директории, и найдет этот мусор. Может такое уже и написал кто то, надо искать.Другой вариант - возможно получится сделать dump и отправить его по сети на другуб машинку и там его развернуть, но тут не уверен.
А вот удалить... Можно модуль ядра написать
> Предложу точно рабочий, но сложный путь. Написать утилиту которая откроет блочное устройство
> в ro, просканирует все директории, и найдет этот мусор. Может такое
> уже и написал кто то, надо искать.
> Другой вариант - возможно получится сделать dump и отправить его по сети
> на другуб машинку и там его развернуть, но тут не уверен.
> А вот удалить... Можно модуль ядра написатьДа, я как раз через дамп и искал. Создал дамп, развернул на этой же машине во временную папку и нашел мусор. Но для удаления мусора - метод не нашел.
По первому варианту, нужно разбираться, пока даже не понимаю как подступиться, второй хоть и долгий но работает.
А вот с удалением... я пока ничего не нашел. Пока вижу только через размонтирование - засада.
root@bsd:~ # mount
/dev/ada0p2 on / (ufs, NFS exported, local, journaled soft-updates)
devfs on /dev (devfs)
/dev/ada0p3 on /usr/ports (ufs, NFS exported, local, journaled soft-updates)
root@bsd:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 9.7G 1.6G 7.3G 18% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ada0p3 4.7G 1.0G 3.3G 23% /usr/ports
root@bsd:~ # du -sh /tmp
20K /tmp
root@bsd:~ # sh
# for i in $(seq 1 3);
> do
> dd if=/dev/random of=/tmp/file$i bs=1M count=500
> done500+0 records in
500+0 records out
524288000 bytes transferred in 2.502629 secs (209494913 bytes/sec)
500+0 records in
500+0 records out
524288000 bytes transferred in 2.560358 secs (204771360 bytes/sec)
500+0 records in
500+0 records out
524288000 bytes transferred in 3.240919 secs (161771396 bytes/sec)
# du -sh /tmp
1.5G /tmp
# ls -la /tmp
total 1536504
drwxrwxrwt 6 root wheel 512 Oct 29 14:15 .
drwxr-xr-x 19 root wheel 1024 Oct 29 13:55 ..
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .ICE-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .X11-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .XIM-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .font-unix
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:14 file1
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:15 file2
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:15 file3
# fsck_ffs -y /dev/ada1p1
** /dev/ada1p1
** Last Mounted on /tmp
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
2 files, 2 used, 507803 free (27 frags, 63472 blocks, 0.0% fragmentation)***** FILE SYSTEM IS CLEAN *****
# mount /dev/ada1p1 /tmp
# ls -la /tmp
total 12
drwxr-xr-x 3 root wheel 512 Oct 28 20:27 .
drwxr-xr-x 19 root wheel 1024 Oct 29 13:55 ..
drwxrwxr-x 2 root operator 512 Oct 28 20:20 .snap
# du -sh /tmp
8.0K /tmp
# mount_nullfs / /mnt
# du -sh /mnt/tmp
1.5G /mnt/tmp
# ls -la /mnt/tmp
total 1536504
drwxrwxrwt 6 root wheel 512 Oct 29 14:15 .
drwxr-xr-x 19 root wheel 1024 Oct 29 13:55 ..
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .ICE-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .X11-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .XIM-unix
drwxrwxrwt 2 root wheel 512 Oct 29 13:55 .font-unix
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:14 file1
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:15 file2
-rw-r--r-- 1 root wheel 524288000 Oct 29 14:15 file3
# rm -f /mnt/tmp/f*
# du -sh /mnt/tmp
20K /mnt/tmp
# umount /mntкак бы и все
> # mount_nullfs / /mntПо идеи эта команда должна отработать на любой системе без подготовки.
Проверил на трех разных системах и версиях
x@g:/# mount_nullfs / /mnt
mount_nullfs: / (/) and /mnt are not distinct pathsКак бы и ответ логически понятен "нельзя примонтировать корень в подчиненную папку(зацикливание)". Но у Вас получилось. Капец, не понимаю.
x@g:/# mount
/dev/gpt/root on / (ufs, local, journaled soft-updates)
Отличие только в отсутствии NFS и у меня монтирование через gpt-меткиЧто не так?
>[оверквотинг удален]
> По идеи эта команда должна отработать на любой системе без подготовки.
> Проверил на трех разных системах и версиях
> x@g:/# mount_nullfs / /mnt
> mount_nullfs: / (/) and /mnt are not distinct paths
> Как бы и ответ логически понятен "нельзя примонтировать корень в подчиненную папку(зацикливание)".
> Но у Вас получилось. Капец, не понимаю.
> x@g:/# mount
> /dev/gpt/root on / (ufs, local, journaled soft-updates)
> Отличие только в отсутствии NFS и у меня монтирование через gpt-метки
> Что не так?в source от 9.1 идет проверка на то чтобы не было вложенности mount-point в target.
# cd /usr/src/sbin/mount_nullfs/
# cp mount_nullfs.c /var/tmp/
# vi mount_nullfs.c
...
/* if (subdir(target, source) || subdir(source, target))
errx(EX_USAGE, "%s (%s) and %s are not distinct paths",
argv[0], target, argv[1]); */комментируете проверку, для Ваших целей на раз - сойдет, хоть это и неверно
и опасно.
# make depend
# make
# make install# mount_nullfs / /mnt
# umount /mntps. позже mount_nullfs доработали.
Спасибо
> Спасибополучилось?