Автомасштабирование.NET является сильной стороной Windows Azure. Вы изучили его?
Servervault работал на Azure некоторое время ;-)
Эта команда покажет, что все удаленные файлы все еще открыты на Система Solaris:
find /proc/*/fd -type f -links 0
Вы можете усечь те, которые вы уверены, что хотите, с помощью этой команды:
:> /proc/p/fd/x
, где p - это идентификатор процесса, а x - дескриптор файла, возвращенный первой командой.
Не волнуйтесь, если в некоторых программах размер, указанный в ls
, через некоторое время будет восстановлен до размера до усечения, фактический размер, используемый на диске, будет намного меньше, так как файл теперь является разреженным. один.
Вы можете попробовать перейти в каталог / proc /
и усечь соответствующий файловый дескриптор. Скажем, fd = 3 указывает на удаленный файл pid == 123:
# echo "" >! /proc/123/fd/3
Метод 1: Используйте подстановку процесса:
command 2> >(sed $'s,.*,\e[31m&\e[m,'>&2)
Метод 2: Создайте функцию в сценарии bash:
color()(set -o pipefail;"$@" 2>&1>&3|sed $'s,.*,\e[31m&\e[m,'>&2)3>&1
Используйте это так:
$ color command
Оба метода покажут команды ] stderr
красным.
Продолжайте читать, чтобы узнать, как работает метод 2. Эта команда демонстрирует некоторые интересные особенности.
color () ...
- Создает функцию bash с именем color. set -o pipefail
- Это параметр оболочки, который сохраняет код возврата ошибки команды, вывод которой передается другой команде. Это выполняется в подоболочке, которая создается круглыми скобками, чтобы не изменять параметр pipefail во внешней оболочке. « $ @ »
- Выполняет аргументы функции как новую команду. " $ @это двоичный файл ... неважно)
$ less /tmp/my10MBfile &
$ lsof -p $(pidof less) | grep 10MBfile
less 29351 max 4r REG 8,3 10485760 521464 /tmp/my10MBfile
Затем я удаляю этот файл
$ rm /tmp/my10MBfile
$ lsof -p $(pidof less) | grep 10MBfile
less 29351 max 4r REG 8,3 10485760 521464 /tmp/my10MBfile (deleted)
$ df -m /tmp
/dev/disk/by-uuid/6835b2fd-971d-420c-ba18-3c729ec2e8a0 14637 9225 4662 67% /
Он все еще там, но удален. Посмотрите на 4-й столбец вывода lsof: Дескриптор файла номер 4 открыт для чтения (4r)
Давайте запустим GDB!
$ gdb -p $(pidof less)
GNU gdb (GDB) 7.4.1-debian
....
Attaching to process 29351
....
(gdb) p close(4)
$1 = 0
(gdb) q
Вот и все!
$ df -m /tmp
/dev/disk/by-uuid/6835b2fd-971d-420c-ba18-3c729ec2e8a0 14637 9215 4672 67% /
Наши 10 МБ возвращаются:)
$ ls /proc/29351/fd
0 1 2 3
$ ps 29351
29351 pts/0 S+ 0:00 less /tmp/my10MBfile
Процесс выполняется все еще работает.
find /proc/*/fd -ls 2> /dev/null | grep '(deleted)'
Найти все открытые файловые дескрипторы.
Grep удален.
StdError to / dev / null
Вывод:
160448715 0 lrwx------ 1 user user 64 Nov 29 15:34 /proc/28680/fd/113 -> /tmp/vteT3FWPX\ (deleted)
Или вы можете использовать awk
find / proc / * / fd -ls 2> / dev / null | awk '/ deleted / {print $ 11}';
вывод awk (проверено в bash Ubuntu 12.04):
/proc/28680/fd/113
Найти и усечь все удаленные файлы (проверено в bash Ubuntu 12.04):
(НЕ ДЕЛАЙТЕ ЭТО ЕСЛИ ВЫ НЕ ЗНАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ)
find /proc/*/fd -ls 2> /dev/null | awk '/deleted/ {print $11}' | xargs -p -n 1 truncate -s 0
-p запросить перед выполнением truncate
Лучше всего выполнить усечение вручную
Усечение вручную:
: > /proc/28680/fd/113
или:
> /proc/28680/fd/113
или:
truncate -s 0 /proc/28680/fd/113
Наслаждайтесь;)
Ни одно из этих решений не помогло мне. Только после использования Bleachbit от имени root я смог правильно освободить место, связанное с удаленными файлами.