Как я восстанавливаю свободное пространство на удаленных файлах, не перезапуская процессы ссылки?

Автомасштабирование.NET является сильной стороной Windows Azure. Вы изучили его?

Servervault работал на Azure некоторое время ;-)

11
задан 16 July 2018 в 02:42
5 ответов

Эта команда покажет, что все удаленные файлы все еще открыты на Система Solaris:

find /proc/*/fd -type f -links 0

Вы можете усечь те, которые вы уверены, что хотите, с помощью этой команды:

:> /proc/p/fd/x

, где p - это идентификатор процесса, а x - дескриптор файла, возвращенный первой командой.

Не волнуйтесь, если в некоторых программах размер, указанный в ls , через некоторое время будет восстановлен до размера до усечения, фактический размер, используемый на диске, будет намного меньше, так как файл теперь является разреженным. один.

2
ответ дан 2 December 2019 в 21:49

Вы можете попробовать перейти в каталог / proc / / fd и усечь соответствующий файловый дескриптор. Скажем, fd = 3 указывает на удаленный файл pid == 123:

# echo "" >! /proc/123/fd/3
0
ответ дан 2 December 2019 в 21:49

Метод 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
    

    Процесс выполняется все еще работает.

6
ответ дан 2 December 2019 в 21:49
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

Наслаждайтесь;)

10
ответ дан 2 December 2019 в 21:49

Ни одно из этих решений не помогло мне. Только после использования Bleachbit от имени root я смог правильно освободить место, связанное с удаленными файлами.

-2
ответ дан 2 December 2019 в 21:49

Теги

Похожие вопросы