Отключить поддержку разреженных файлов на ext4

1<filename— это перенаправление, оно говорит оболочке открыть файл filenameдля чтения и сделать его доступным в файловом дескрипторе 1 для выполняемой команды (или для всего процесса оболочки, если вы используете перенаправление сexec). Это обычно работает для всех перенаправлений:<отмечает перенаправление ввода,а необязательный номер в начале указывает номер файлового дескриптора.

Что необычно в этом перенаправлении, так это то, что fd 1 зарезервирован для стандартного потока вывода, поэтому программы обычно предполагают, что в него можно записывать. Если он открывается перенаправлением ввода, это предположение не выполняется.

$ touch filename
$ ls 1<filename
ls: write error: Bad file descriptor

То же самое произойдет, если вы откроете fd 2 (stderr )для ввода или fd 0 (stdin )для вывода .

$ cat 0> filename
cat: -: Bad file descriptor

Конечно, если запись в stderr невозможна, вы не получите сообщение об ошибке. Вы, вероятно, получите ложный ненулевой статус выхода.

0
22.04.2020, 15:19
1 ответ

Нет возможности отключить поддержку разреженных файлов в ext4, но ext4 (и ядро ​​Linux в целом )поддерживают функции, которые позволят вам реализовать обходной путь без написания нового драйвера файловой системы (или адаптации драйвер ext4 ).

Я думаю, что сработает реализация оболочки разделяемой библиотеки, которую вы загрузите с помощью LD_PRELOAD, и переопределите все вызовы, которые могут привести к созданию разреженных файлов, чтобы обрабатывать их таким образом, чтобы они не делают. Быстрый способ размещения блоков в файлах заключается в использовании posix_fallocate, что гарантирует, что дисковое пространство будет выделено при возврате, без обязательной записи всех нулей в блоки (, но файловая система гарантирует, что чтение из выделенных блоков вернет нули ). Ваша прокладка также должна перехватывать posix_fallocate, так как ее также можно использовать для создания разреженных файлов...

Существуют ограничения на LD_PRELOADпрокладки (, в частности, для двоичных файлов setuid ), но они могут не применяться в вашем случае.

1
19.03.2021, 02:26

Теги

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