Файловые системы

Нюансы выбора файловой системы и флагов монтирования

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

Вот краткое описание основных высокопроизводительных файловых систем:

EXT4 - универсальный солдат, что подходит, как для SSD носителей, так и для HDD. Имеет самое большое распространение и документацию. Обеспечивает высокие показатели чтения и записи. Из минусов стоит отметить, что данная файловая система начинает проигрывать более новым представителям на рынке и требует ручного допиливания для SSD (SATA, NVMe, PCI и т.п.). Хорошо подходит для домашнего компьютера и файлопомойки, а также серверам которым необходима максимальная стабильность.

BTRFS - Т1000 из мира файловых систем. Является наследником идей EXT2-3, и прекрасно подходит для SSD носителей, ибо имеет модули автодетекта, что позволяет не сильно париться с настройкой TRIM и флагов монтирования. Скорость чтения сопоставима, а иногда (Особенно при высоких нагрузках) превышают показатели EXT4. Идеальный выбор для игровой/домашней системы на базе Linux.

ZFS - Новая, довольно странная, файловая система. По отзывам других людей - неплоха для масштабных серверов, т.к. 128 битная, но зачем тогда такие размеры если существует ограничение в 255 символов? В любом случае, не рекомендуется использовать на декстопе ввиду большой возни с её настройкой и установкой, т.к. её поддержка официально отсутствует в ядре Linux из-за проблем с её лицензированием.

Оптимальные флаги монтирования

Вот оптимальные параметры для SSD носителей. Описание каждого из них вы можете найти - здесь.

rw,relatime,ssd,ssd_spread,space_cache=v2,max_inline=256,commit=600,nodatacow

Прежде всего, отметим, что вы можете изменить relatime на noatime или lazytime - все три параметра отвечают за запоминание времени доступа к файлами и прочим связанным с ним атрибутами, что только портит отклик.

Параметр noatime полностью выключает данную функцию, что может привести к некоторым багам в приложениях зависимых от времени (например git), но автор никогда не встречал данной проблемы. Параметр lazytime успешно будет выполнять все функции времени, но выполнять их промежуточную запись в оперативной памяти, что позволит избежать замедления без потери функционала, но говорят lazytime чудит, поэтому автор советует noatime.

Но если вы хотите минимум возможных проблем, то оставьте флаг relatime.

space_cache можно заменить на space_cache=v2, что тоже даст определенную прибавку производительности.

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

../_images/file-systems-1.png

Внимание

Параметр commit=600 может вызывать повышенное потребление оперативной памяти и портить данные на диске.

Внимание

При использовании Btrfs для корневого раздела, обязательно установите пакет btrfs-progs.

Сжатие в файловой системе Btrfs

В файловой системе Btrfs есть возможность включения сжатия. Все записываемые файлы по возможности будут сжиматься и экономить пространство на носителе HDD или SSD.

Для SSD это может быть важно в связи с их ограниченным ресурсом на запись.

Согласно wiki Btrfs, официально имеется 3 поддерживаемых алгоритма:

  • zlib - высокая степень сжатия, но низкая скорость сжатия и распаковки

  • lzo - высокая скорость сжатия и распаковки, но наименьший уровень сжатия из представленных алгоритмов

  • zstd - степень сжатия сравнимая с zlib и более быстрые сжатие и распаковка, однако уступающие по скорости lzo

Для включения алгоритма сжатия в файловой системе необходимо:

  1. Убедиться в наличии необходимого алгоритма в системе или установить выбранный (zlib, lzo или zstd соответственно).

  2. Отредактировать файл etc/fstab, добавив для необходимого раздела или носителя следующий флаг монтирования:

compress='алгоритм':N

(Где N - степень сжатия: для zlib - N = 1,2,...9; для lzo - выбор уровня сжатия не предусмотрен, поэтому :N - не указываются; для zstd - N =1,2,...15. Чем выше данный параметр, тем сильнее будут сжиматься данные, конечно при условии что это возможно, но также будет повышена нагрузка на процессор, поскольку сжатие выполняется за счет его ресурсов. Cогласно wiki Btrfs, оптимальным значением N по отношению степень сжатия / скорость считается 3)

Например для zstd со степенью сжатия 3 запись будет выглядеть примерно следующим образом, если учесть приведенные выше флаги монтирования:

rw,relatime,compress=zstd:3,ssd,ssd_spread,space_cache=v2,max_inline=256,commit=600

Внимание

Сжатие файловой системы не работает вместе с флагом монтирования nodatacow.

После выставления данного флага монтирования новые файлы начнут сжиматься при записи на диск. Для сжатия уже имеющихся данных необходимо выполнить команду:

sudo btrfs filesystem defragment -calg /path

(Где -calg - алгоритм (указывается как czlib, clzo или czstd в зависимости от выбранного алгоритма), path - путь к разделу или папке)

Для сжатия уже существующих данных в папке или целого раздела необходимо указать ключ -r перед -calg:

sudo btrfs filesystem defragment -r -calg /path

(Где path - путь к разделу или папке)

Внимание

Степень сжатия в данном случае не указывается!

Определение эффективности сжатия

Если вы хотите определить эффективность сжатия на вашем разделе/диске, то вам необходимо воспользоваться программой compsize. Установить ее можно с помощью команды:

sudo pacman -S compsize

Для выполнения проверки на эффективность необходимо использовать команду:

sudo compsize /path

(Где path - путь к разделу, папке или файлу)

Пример вывода команды:

../_images/compsize.png

Пояснения:

  • Первый столбец:
    • Строка TOTAL - итоговые данные, которые учитывают все сжатые и не сжатые файлы и разные алгоритмы (если такие имеются).

    • Строка none - данные, которые не были сжаты.

    • Далее отображаются все использованные алгоритмы (в данном случае - zstd).

  • Второй столбец показывает данные в процентах.

  • Третий столбец отображает фактически использованное место на диске/разделе.

  • Четвертый столбец показывает данные без сжатия.

  • Пятый - видимый размер файла, тот, который зачастую отображается в системе.

Скорость обработки алгоритма zstd на примере AMD Ryzen 7 3700X

Для сравнения степеней сжатия алгоритма zstd использовалась бенчмарк платформа phoronix-test-suite. В данной программе, для проверки скорости сжатия и распаковки данных, доступно три степени - 3, 8, 19. Для получения информации о падении скорости выполнения сжатия нам будет достаточно и первых двух, поскольку степень сжатия 19 на данный момент не поддерживается (однако данные также приведены для ознакомления), и если обратить внимание на полученные данные, то это и не имеет особого смысла. Далее представлены результаты замеров:

../_images/zstd_3.png ../_images/zstd_8.png ../_images/zstd_19.png

Как можно видеть из графиков, падение скорости при перехода от степени 3 к степени 8 сопровождается падением скорости сжатия более чем в 4,7 раз (неговоря о более высоких степенях сжатия) и практически не изменяется при выполнении распаковки, что может негативно сказаться на скорости установки программ и возможно в некоторых других ситуациях которые требует выполнения записи на диск.

Стоит отметить, что в случае выполнения уставки игр с использованием степени сжатия 15, было замечено повышение нагрузки на процессор вплоть до 72-75% в тех случаях, когда файлы поддавались сжатию.

Список протестированных игр на эффективность сжатия (Спасибо @dewdpol!)

Далее представлен список протестированных игр на сжатие в файловой системе Btrfs. Данные были получены с помощью программы compsize и являются округленными, поэтому информация может нести частично ознакомительный характер.

Игра

Алгоритм

Уровень сжатия

Необходимое место (N)

Используемое место(U)

U/N

Экономия

1

A Plague Tale: Innocence

zstd

3

41 GB

41 GB

99%

182 MB

15

306 MB

2

A Story About My Uncle

zstd

3

1,1 GB

1,1 GB

94%

63 MB

15

93%

74 MB

3

Aegis Defenders

zstd

3

1,3 GB

240 MB

17%

1,10 GB

15

230 MB

16%

1,11 GB

4

Among Us

zstd

3

429 MB

284 MB

66%

145 MB

15

279 MB

65%

150 MB

5

Aragami

zstd

3

7,6 GB

5,4 GB

71%

2,20 GB

15

5,3 GB

69%

2,27 GB

6

Armello

zstd

3

1,6 GB

1,5 GB

95%

73 MB

15

94%

83 MB

7

Bastion

zstd

3

1,1 GB

1,1 GB

94%

67 MB

15

1,0 GB

93%

81 MB

8

BattleBlock Theater

zstd

3

1,8 GB

1,7 GB

93%

117,8 MB

15

118,7 MB

9

Beholder

zstd

3

1,9 GB

1,0 GB

55%

0,77 GB

15

1,1 GB

58%

0,82 GB

10

Beholder 2

zstd

3

2,5 GB

2,2 GB

85%

385 MB

15

2,1 GB

81%

483 MB

11

Blasphemous

zstd

3

854 MB

805 MB

94%

48 MB

15

802 MB

93%

51 MB

12

Blue Fire

zstd

3

6,0 GB

4,9 GB

81%

1,10 GB

15

4,7 GB

77%

1,30 GB

13

Brothers - A Tale of Two Sons

zstd

3

1,2 GB

1,1 GB

95%

53 MB

15

52 MB

14

Castle Crashers

zstd

3

199 MB

183 MB

92%

15,4 MB

15

91%

15,8 MB

15

Celeste

zstd

3

1,1 GB

897 MB

78%

251 MB

15

871 MB

75%

277 MB

16

Child of light

zstd

3

2,3 GB

2,3 GB

99%

15 MB

15

9,5 MB

17

Children of Morta

zstd

3

1,6 GB

1,5 GB

94%

87 MB

15

92 MB

18

CODE VEIN

zstd

3

35 GB

35 GB

99%

75 MB

15

124 MB

19

Cortex Command

zstd

3

97 MB

65 MB

67%

32 MB

15

64 MB

66%

33 MB

20

Cuphead

zstd

3

3,6 GB

3,3 GB

93%

223 MB

15

233 MB

21

Curse of Dead Gods

zsrd

3

2,7 GB

1,4 GB

53%

1,25 GB

15

51%

1,29 GB

22

D-Corp

zstd

3

1,2 GB

720 MB

57%

525 MB

15

697 MB

55%

549 MB

23

Dark Souls: Prepare To Die Edition

zstd

3

3,7 GB

3,7 GB

99%

1,57 MB

15

1,61 MB

24

Dark Souls III

zstd

3

24 GB

24 GB

99%

0,53 MB

15

0,60 MB

25

Darkest Dungeon

zstd

3

3,2 GB

2,8 GB

88%

394 MB

15

87%

410 MB

26

Darkestville Catle

zstd

3

1,7 GB

798 MB

40%

0,99 GB

15

682 MB

38%

1,02 GB

27

Darksiders III

zstd

3

24 GB

24 GB

99%

22 MB

15

30 MB

28

Dead Cells

zstd

3

1,1 GB

1,1 GB

97%

24 MB

15

1,0 GB

31 MB

29

Death's Door

zstd

3

3,6 GB

2,1 GB

58%

1,48 GB

15

57%

1,54 GB

30

Death's Gambit: Afterlife

zstd

3

1 GB

729 MB

66%

367 MB

15

720 MB

65%

376 MB

31

Deponia: The Complete Journey

zstd

3

9,5 GB

9,5 GB

99%

24,2 MB

15

25,6 MB

32

Devil May Cry 5

zstd

3

33 GB

33 GB

99%

82 MB

15

86 MB

33

Disco Elysium

zstd

3

9,5 GB

9,1 GB

96%

305 MB

15

95%

391 MB

34

Don't Starve Together

zstd

3

2,5 GB

1,8 GB

74%

651 MB

15

73%

679 MB

35

Eldest Souls

zstd

3

1,0 GB

720 MB

69%

314 MB

15

708 MB

68%

326 MB

36

Evergate

zstd

3

2,9 GB

1,9 GB

64%

1,01 GB

15

63%

1,03 GB

37

Frostpunk

zstd

3

8,9 GB

8,9 GB

99%

24 MB

15

25,2 MB

38

Furi

zstd

3

4,3 GB

2,7 GB

62%

1,53 GB

15

63%

1,52 GB

39

Gato Roboto

zstd

3

440 MB

415 MB

94%

25,5 MB

15

414 MB

26,1 MB

40

Gears Tactics

zstd

3

29 GB

29 GB

99%

66 MB

15

97 MB

41

Ghost of a Tale

zstd

3

4,7 GB

3,7 GB

79%

0,90 GB

15

0,94 GB

42

Ghostrunner

zstd

3

24 GB

20 GB

84%

3,7 GB

15

43

Gibbous - a Cthulhu Adventure

zstd

3

9,0 GB

4,2 GB

47%

4,76%

15

4,1 GB

46%

4,87 GB

44

Gris

zstd

3

3,2 GB

1,5 GB

47%

1,70 GB

15

46%

1,73 GB

45

Hades

zstd

3

11 GB

10 GB

95%

480 MB

15

498 MB

46

Hand of Fate

zstd

3

2,5 GB

2,2 GB

90%

255 MB

15

89%

287 MB

47

Hand of Fate 2

zstd

3

4,1 GB

4,1 GB

99%

35 MB

15

38 MB

48

Hellblade: Sanua's Sacrifice

zstd

3

18 GB

16 GB

87%

2,3 GB

15

18 GB

96%

693 MB

49

Helldivers

zstd

3

6,4 GB

6,4 GB

99%

25 MB

15

27 MB

50

Hob

zstd

3

2,4 GB

2,2 GB

90%

230 MB

15

2,1 GB

89%

250 MB

51

Hollow Knight

zstd

3

7,5 GB

1,5 GB

20%

5,87 GB

15

1,4 GB

19%

5,98 GB

52

Inmost

zstd

3

1,3 GB

649 MB

47%

709 MB

15

638 MB

720 MB

53

Jotun

zstd

3

3,8 GB

1,8 GB

48%

1,91 GB

15

49%

1,84 GB

54

Journey

zstd

3

3,3 GB

1,8 GB

55%

1,49 GB

15

1,9 GB

56%

1,44 GB

55

Katana ZERO

zstd

3

216 MB

178 MB

82%

38 MB

15

177 MB

81%

39 MB

56

Kate

zstd

3

254 MB

104 MB

40%

151 MB

15

100 MB

39%

155 MB

57

Limbo

zstd

3

98 MB

97 MB

98%

1,7 MB

15

1,8 MB

58

Little Nightmare

zstd

3

8,9 GB

5,8 GB

65%

3,1 GB

15

4,8 GB

54%

4,1 GB

59

Loop Hero

zstd

3

140 MB

116 MB

83%

22,8 MB

15

115 MB

82%

23,9 MB

60

Magicka

zstd

3

1,6 GB

1,6 GB

96%

68 MB

15

95%

71 MB

61

Magicka 2

zstd

3

2,9 GB

99%

8,1 MB

15

2,9 GB

8,7 MB

62

Mark of the Ninja: Remastered

zstd

3

7,5 GB

6,9 GB

92%

564 MB

15

591 MB

63

Master of Anima

zstd

3

1,5 GB

1,2 GB

81%

292 MB

15

80%

308 MB

64

METAL GEAR RISING: REVENGEANCE

zstd

3

24 GB

24 GB

99%

17,8 MB

15

19,4 MB

65

Moonlighter

zstd

3

1,1 GB

577 MB

48%

608 MB

15

572 MB

613 MB

66

Move or Die

zstd

3

666 MB

572 MB

85%

94 MB

15

567 MB

99 MB

67

My Friend Pedro

zstd

3

3,5 GB

2,9 GB

82%

637 MB

15

81%

666 MB

68

Nier:Automata

zstd

3

40 GB

37 GB

91%

3,5 GB

15

3,3 GB

69

Nine Parchments

zstd

3

5,7 GB

5,7 GB

98%

68 MB

15

78 MB

70

Ori and the Blind Forest: Definitive Edition

zstd

3

10 GB

4,9 GB

48%

5,3 GB

15

4,7 GB

46%

5,5 GB

71

Ori and the Will of the Wisps

zstd

3

11 GB

5,5 GB

48%

5,8 GB

15

5,3 GB

46%

6,1 GB

72

Othercide

zstd

3

6,0 GB

5,9 GB

98%

94 MB

15

113 MB

73

Out of Line

zstd

3

1,3 GB

497 MB

37%

836 MB

15

476 MB

35%

857 MB

74

Outland

zstd

3

675 MB

593 MB

87%

82 MB

15

589 MB

86 MB

75

Overcooked! 2

zstd

3

7,9 GB

7,7 GB

98%

161 MB

15

97%

169 MB

76

Papers, Please

zstd

3

58 MB

45 MB

77%

13 MB

15

44 MB

76%

13,6 MB

77

Path of Exile

zstd

3

27 GB

27 GB

99%

27 MB

15

29 MB

78

Peace, Death!

zstd

3

83 MB

76 MB

91%

7,2 MB

15

7,5 MB

79

Peace, Death! 2

zstd

3

34 MB

26 MB

78%

7,04 MB

15

7,51 MB

80

Pummel Party

zstd

3

2,1 GB

1,4 GB

67%

712 MB

15

66%

723 MB

81

Remember Me

zstd

3

6,7 GB

6,6 GB

99%

57 MB

15

58 MB

82

Rocket League

zstd

3

18 GB

18 GB

99%

20 MB

15

46 MB

83

RUINER

zstd

3

10 GB

10 GB

99%

50 MB

15

77 MB

84

Salt and Sanctuary

zstd

3

563 MB

540 MB

95%

23 MB

15

24 MB

85

Samorost 1

zstd

3

68 MB

68 MB

99%

19 KB

15

23 KB

86

Samorost 2

zstd

3

141 MB

141 MB

99%

1,22 MB

15

140 MB

98%

1,33 MB

87

Samorost 3

zstd

3

1,1 GB

1,0 GB

99%

9,5 MB

15

96%

43 MB

88

Sekiro: Shadow Die Twice

zstd

3

13 GB

13 GB

99%

1,5 MB

15

1,6 MB

89

Severed Steel

zstd

3

4,0 GB

2,7 GB

68%

1,22 GB

15

67%

1,26 GB

90

Shadow Tactics: Blades of the Shogun

zstd

3

7,3 GB

5,0 GB

69%

2,2 GB

15

4,8 GB

66%

2,5 GB

91

Shadowrun Returns

zstd

3

2,8 GB

1,1 GB

39%

1,68 GB

15

1,0 GB

37%

1,74 GB

92

Shattered - Tale of the Forgotten King

zstd

3

6,3 GB

6,3 GB

99%

14,7 MB

15

15,7 MB

93

Shiro

zstd

3

80 MB

74 MB

91%

6,5 MB

15

73 MB

6,7 MB

94

Skul: The Hero Slayer

zstd

3

1016 MB

1001 MB

98%

14,5 MB

15

987 MB

97%

29 MB

95

SpeedRunners

zstd

3

662 MB

651 MB

98%

11 MB

15

650 MB

12 MB

96

Spiritfarer: Farewell

zstd

3

6,0 GB

2,3 GB

38%

3,60 GB

15

39%

3,58 GB

97

Stoneshard: Prologue

zstd

3

289 MB

261 MB

90%

27,2 MB

15

260 MB

89%

28,4 MB

98

Stories: The Path of Destinies

zstd

3

1,6 GB

1,6 GB

99%

13,8 MB

15

14,8 MB

99

Styx: Master of Shadow

zstd

3

6,7 GB

6,6 GB

98%

108 MB

15

114 MB

100

Styx: Shards of Darkness

zstd

3

10 GB

10 GB

99%

17,1 MB

15

22,9 MB

101

Sundered: Eldritch Edition

zstd

3

2,2 GB

1,7 GB

75%

584 MB

15

1,5 GB

69%

719 MB

102

SYNTHETIK

zstd

3

599 MB

518 MB

86%

81 MB

15

516 MB

83 MB

103

Tabletop Simulator

zstd

3

2,7 GB

1,7GB

65%

0,91 GB

15

63%

0,95 GB

104

The Escapists 2

zstd

3

2,4 GB

1,7 GB

71%

710 MB

15

717 MB

105

The Life and Suffering of Sir Brante

zstd

3

2,7 GB

1,1 GB

42%

1,52 GB

15

43%

1,48 GB

106

The Cave

zstd

3

1,1 GB

1,1 GB

98%

22 MB

15

24 MB

107

The Red Solstice

zstd

3

2,7 GB

1,4 GB

52%

1,31 GB

15

51%

1,34 GB

108

They Always Run

zstd

3

10 GB

4,2 GB

39%

6,6 GB

15

3,8 GB

34%

7,1 GB

109

This War of Mine

zstd

3

2,6 GB

2,5 GB

98%

34 MB

15

36 MB

110

Titan Souls

zstd

3

206 MB

183 MB

88%

21,9 MB

15

182 MB

22,5 MB

111

Transistor

zstd

3

3,0 GB

2,7 GB

88%

364 MB

15

87%

384 MB

112

Trine

zstd

3

1,3 GB

1,3 GB

97%

41 MB

15

96%

44 MB

113

Undertale

zstd

3

155 MB

141 MB

90%

14,2 MB

15

140 MB

14,9 MB

114

Valiant Hearts: The Great War

zstd

3

1,2 GB

1,1 GB

99%

9,8 MB

15

10,2 MB

115

Vanquish

zstd

3

18 GB

18 GB

99%

7,7 MB

15

12,3 MB

116

Vesper

zstd

3

2,8 GB

998 NB

34%

1,88 GB

15

964 MB

32%

1,92 GB

117

Void Bastards

zstd

3

5,7 GB

2,3 GB

40%

3,30 GB

15

41%

3,28 GB

118

Wasteland 2: Director's Cut

zstd

3

14 GB

13 GB

91%

1,24 GB

15

1.10 GB

119

Wasteland 3

zstd

3

26 GB

24 GB

91%

2,11 GB

15

23 GB

89%

2,71 GB

120

Witch It

zsta

3

4,2 GB

4,1 GB

98%

85 MB

15

97%

95 MB

121

Wizard of Legend

zstd

3

786 MB

475 MB

60%

312 MB

15

468 MB

59%

318 MB

Итого

zstd

3

761 GB

666 GB

87%

94 GB

15

664 GB

97 GB

Кэш шейдеров представленных здесь игр в Steam

zstd

3

26 GB

25 GB

99%

217 MB

15

218 MB

Примечания:

  • По возможности данный список будет расширяться новыми играми и другими алгоритмами сжатия.

  • U/N - выраженное в процентах соотношение количества фактически занятого места к необходимому, т.е. если от 100% отнять U/N можно получить процент сэкономленного места на диске. Из чего следует, что чем меньше данный показатель, тем лучше.

  • Экономия рассчитывалась вручную с округлением в меньшую сторону. Другими словами, если получалось 1,3087... GB, то записывалось как 1,30 GB.

Промежуточные результаты

  • 64 игр из представленных 121 - практически не сжимаются, экономия места достигает всего 0-10%.

  • 33 игр из представленных 121 - сжимаются с низкой эффективностью, экономия места составляет 11-40%.

  • 22 игры из представленных 121 - сжимаются со средней эффективностью, экономия места составляет 41-70%.

  • 2 игры из представленных 121 - сжимаются хорошо, экономия места составляет 71-90%.

  • Кэш шейдеров, который собирается и хранится на диске в Steam (при включении данной функции) сжимается незначительно - менее 1% экономии.

  • С учетом разницы в экономии места порядка 3 GB между максимальной степенью сжатия 15 и рекомендуемой для Btrfs - 3, и значительного падения скорости выполнения сжатия, можно отметить, что использование степени сжатия выше 3 выглядит крайне сомнительно.