Есть ли какой-либо путь в BTRFS для установки сжатия постоянно?

Чтобы Ваша команда обнаружила eof, это должно читать из stdin. Таким образом, по-видимому, это ожидает некоторый вход. Таким образом, это походит на то, в чем Вы нуждаетесь, не пустой вход (/dev/null точно предназначен для того), но введите, это никогда не прибывает.

Это может быть моделировано с каналом, куда никто никогда не собирается записать на другом конце как:

sleep 999999999 | the-command

Или избегать необходимости выполнять это дополнительное sleep команда, это могло быть сделано с именованным каналом:

fifo=$(mktemp -u) &&
  mkfifo "$fifo" &&
  (rm "$fifo" && the-command <&3 3<&- &) 3<> "$fifo"

Здесь с помощью посреднического дескриптора файла для работы вокруг того, что оболочка подключает stdin с /dev/null implicitely, когда Вы запускаете команду с & (если Вы не добавляете явное stdin перенаправление как наш <&3 здесь).

На Linux (и вероятно только на Linux), можно также сделать:

the-command < /dev/fd/1 3>&1 > /dev/null | :

/dev/fd/1 то, где fd 1 подключен к каналу на Linux, ведет себя как именованный канал. Таким образом, при открытии его в режиме чтения Вы получаете конец чтения канала.

Таким образом выше, fd 0 будет подключен к концу чтения канала, другой конец которого находится на fd 3 the-command. Поскольку the-command движение ничего не должно писать на своем fd 3, любом read попытка на fd 0 заблокируется (или чтение неблокирования возвратится с нет ничего для чтения все же, или выбор/опрос не возвратит ничего для чтения любого как the-command вероятно, делает, если это делает что-либо еще, чем ожидание входа, который никогда не прибывает).

7
19.03.2014, 01:07
2 ответа
[114837]btrfs будет сжимать каждый файл, измененный с момента его монтирования, если вы используете:

Если вы хотите, чтобы ВСЕ файлы сжимались таким образом, у меня есть небольшой сценарий, который я написал, чтобы сделать это. ...

Вышеуказанное работает только на моей

$HOME

директории - но вы можете использовать его на чем угодно и на чем угодно. В нем также есть

-n

операнд, переданный в

sh

ping 224.0.0.1

как есть, чтобы вы могли сами увидеть, что

sh

в настоящее время

не

делает перед тем, как удалить его, чтобы сказать ему сделать это. В любом случае, сначала он запрашивает

дю

для файлов в

читаемом человеком формате

[115409] (вероятно, здесь это излишне, так как мы в любом случае удаляем это на следующем шаге) [115410], которые больше

  1. 1МБ

  2. или

$((1024*1024))).

It

|pipes

его информация на

sed

которая снимает все перед ведущим

  • /, "цитирует"

    • имя файла, строит дефрагмент файловой системы
    • btrfs -verbose -flush-to-disk -compress-lzo \filename
    • и передает его для выполнения команде
  • |pipe

    • на
    • sudo sh
.

Опять же, он ничего не будет делать, пока действует

sh --no-execute

.

Я думаю, что некоторые [115429]очень [115430] недавние сборки

btrfs

userspace tool делают дефрагментацию целых каталогов рекурсивно, но если это так, то это довольно новая вещь, так что мне всегда приходилось делать такие вещи.[114850].

4
27.01.2020, 20:19

Из того, что я прочитал, вы можете установить свойство compressionв корне подтома для достижения этого [0, 1]:

sudo btrfs property set /mnt/your-subvolume compression lzo

После захвата UUID вашего подтома Btrfs с помощью sudo btrfs filesystem show /mnt/your-subvolumeвы можете затем подтвердить, что функция сжатия LZO в настоящее время включена с помощью:

cat /sys/fs/btrfs/<UUID>/features/compress_lzo

Если он включен, он должен вернуть 1.

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting-shared-folder-compression-on-synology-nas-btrfs/

4
27.01.2020, 20:19

Теги

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