Как вывести список открытых файлов в режиме чтения-записи и только для записи в файловой системе BTRFS? - PullRequest
0 голосов
/ 24 марта 2020

Я пишу сценарий резервного копирования bash, который создает вложенные снимки BTRFS на подключенном томе (т.е. / mnt / btrfs / subvolume). Как обычно, я бы использовал «lsof / mnt / btrfs / subvolume» и перенаправил его вывод во что-то вроде «awk» NR == 1 || $ 4 ~ / [0-9] [uw] / '», так что я могу видеть, Есть какие-либо изменяющиеся файлы.

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
sh       5019 root    1w   REG   8,35  2088960      12 /mnt/ext4/currently_generated_archive.tar.xz

Это не будет работать на BTRFS таким же образом и не возвращает открытые файлы для записи. Мое лучшее предположение состоит в том, что подобъемы BTRFS используют «Копировать при записи», и, следовательно, kernel / lsof каким-то образом одурачен и не показывает эти изменения. Кто-нибудь знает, как я могу проверить, изменяются ли / пишутся ли какие-либо файлы под смонтированным подобъемом BTRFS?

С уважением

1 Ответ

0 голосов
/ 26 марта 2020

Я обошел эту проблему, опуская все параметры в lsof и непосредственно подбирая значения для точки монтирования BTRFS и, наконец, применяя фильтр записи, так что он становится примерно таким:

lsof | grep /some/BTRFS_mount_point | awk '$4~/[0-9][uw]/'

Я использую Debian 10 для test и по какой-то причине lsof / some / BTRFS_mount_point никогда не будет возвращать записи, что прекрасно работает с аналогичным подключенным томом ext4.

...