LINUX.ORG.RU
ФорумTalks

Ограничения ext4... и хитрости по их обходу.

 , , ,


1

2

Сабж


Discourse — широко используемая платформа для обсуждений, которая в настоящее время поддерживает более 22 000 онлайн-сообществ. Резервное копирование сайта было нарушено из-за GIF-файла размером 1,6 Мбайт, который был скопирован пользователями 246 173 раза, что превысило лимит файловой системы Linux ext4 на жёсткие ссылки. В результате анимация танца радости Рейчел из сериала «Друзья» в исполнении Дженнифер Энистон (Jennifer Aniston) заняла в бэкапе 377 Гбайт.

Платформа Discourse позволяет пользователям вставлять эмодзи и GIF-изображения в свои обсуждения. «Когда файл перемещается между контекстами безопасности (например, из личного сообщения в публикацию), система создаёт новую копию со случайным SHA1, — пояснил технический блогер Discourse Джейк Голдсборо (Jake Goldsborough). — Исходное содержимое идентично, но Discourse рассматривает его как новый файл».

Таким образом, популярное изображение или GIF-реакция распространяется по постам, репостам и личным сообщениям, и каждый контекст создаёт ещё одну копию файла. Файл, создавший 377 Гбайт избыточного размера бэкапа — это Рейчел из сериала «Друзья», танцующая свой танец радости. Эта GIF-анимация, по словам Discourse, «постоянно использовалась в постах, личных сообщениях, повсюду».

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

Это казалось элегантным решением, пока компания не столкнулась с ограничением файловой системы ext4 на примерно 65 000 жёстких ссылок на один индексный дескриптор (inode). В результате, по словам Discourse, «вместо одной загрузки для всех 246 173 дубликатов мы получили одну загрузку плюс 181 000 резервных загрузок после достижения лимита».

Discourse всё же удалось найти решение. Оно начинается так же, как и старое, с создания жёстких ссылок. Но когда файловая система выдаёт сообщение об ошибке EMLINK («превышение лимита жёстких ссылок»), следующая копия файла становится «основной», пока снова не будет достигнут лимит. Эта новая мера, по словам Discourse, «работает на любой файловой системе, никакой настройки не требуется».

«Теперь мы знаем, что Дженнифер Энистон может проводить стресс-тестирование инфраструктуры», — с иронией прокомментировала ситуацию Discourse в своём блоге.


Фигня случается, чо

★★★★★

Спросил ИИ.

XFS — pow(2, 31) - 1 
JFS — pow(2, 32) - 1 

У прочих основных ФС счётчики ссылок 16-битные, даже у Btrfs (??? реально?).

wandrien ★★★★
()

а ведь даже у reiserfs уже не было таких детских болезней, как фиксированное кол-во inode, ограничение на кол-во файлов в директории, хардлинков вроде 2³²

madcore ★★★★★
()
Ответ на: комментарий от madcore

Эта ФС имела все шансы стать мейнстримом. Но её убили 2 вещи:

  • Её создатель убил свою жену
  • ФС была названа в его честь

Произойди любое событие иначе – вероятно, была бы и сейчас в деле.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от madcore

Там по-разному было.

Вот тут описано, что использовалось два вида inode. В старом формате 16-битный счетчик ссылок, в новом 32-битный.

Но да, в ту эпоху, когда делали ext3 и особенно ext4, оставить 16-битный счетчик это кринж.

https://www.opennet.ru/docs/RUS/reiserfs_ondisk_layout/

wandrien ★★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

я в курсе этой истории
в итоге идеи из reiser4 появились только в не самых мейнстримовых btrfs и zfs

madcore ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

P.S. Очевидно, что я против убийств в целом и убийства жены Райзера в частности. Тем не менее, раз я положительно говорю о ReiserFS, мне приходится по умолчанию такое добавлять. Это и погубило эту ФС.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от wandrien

с ext3-то понятно, надо была совместимость с ext2 с приколхоженным сбоку журналом
но ext4-то с нуля, и это уже 2008 год, лицорука

madcore ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

там если углубиться в детали той говнодрамы, убийство даже не самое кринжовое событие
плюс, в свой проф деятельности Ганс был не очень покладистый и постоянно шёл против системы, отчего reiser4 с самого начала не принимали в ведро

madcore ★★★★★
()
Ответ на: комментарий от madcore

Вот, тоже, @lenin386 везде пишет, мол, линукс - для серверов, а вот FS вполне десктопная

tiinn ★★★★★
() автор топика
Ответ на: комментарий от madcore

ext4-то с нуля? ext2/3 с отложенной записью. _Крайне_ сомнительная фича, между прочим, всегда использую ext3, если объёма хватает.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)

знакомо, у меня на разделе ~120Gb иноды кончились примерно через месяц экспериментов с Guix. Виновником оказались иконки Papirus

err
()
Ответ на: комментарий от err

знакомо, у меня на разделе ~120Gb иноды кончились

Ну не, тут-то проблема в лимите хардлинков на файл. Сомневаюсь, что на десктопе с таким вообще кто-то сталкивался.

kneedeep
()
Ответ на: комментарий от err

Ну тут немного другое, у чуваков из сабжа не иноды кончились, а счетчик внутри одного инода.

wandrien ★★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от lenin386

Переоценена ценность этого трима, нахрен он не нужен.

лол

Если нужен - вколоти в крон, делов то.

как ты его вколотишь, если нужна поддержка со стороны фс

madcore ★★★★★
()
Ответ на: комментарий от madcore

Лол, не лол. Всё без него работает, абсолютно так же. Со стороны ФС нужна поддержка _автоматического_ трима. Для ext3, вколачиваешь fstrim в крон, если тебе оно надо. Хоть на fat32 работать будет.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от wandrien

А зачем больше? А место на диске и в памяти занимает

cobold ★★★★★
()
Ответ на: комментарий от lenin386

Лол, не лол. Всё без него работает, абсолютно так же.

это 4.2

Со стороны ФС нужна поддержка _автоматического_ трима. Для ext3, вколачиваешь fstrim в крон, если тебе оно надо. Хоть на fat32 работать будет.

тем более 4.2

madcore ★★★★★
()
Ответ на: комментарий от madcore

fat32 trim linux TRIM is supported for FAT32 volumes in Linux, allowing SSDs to manage free space for better performance. It can be enabled using the -o discard mount option for continuous trimming, or by running fstrim to manually trim free blocks on demand, as supported by the dosfstools package. How to TRIM FAT32 in Linux: Check TRIM Support: Use lsblk --discard to check for discard capabilities (DISC-GRAN > 0). Manual TRIM (fstrim): To trim a mounted FAT32 partition, use: bash sudo fstrim -v /mnt/fat32_partition

lenin386 ★★★★★
()
Ответ на: комментарий от madcore

Ext3 supports TRIM in Linux via manual fstrim or scheduled trimming on modern kernels (3.0+), but continuous TRIM (using discard in fstab) is not recommended and may fail, potentially mounting partitions as read-only. Using fstrim -v / is the preferred, safer method for optimizing SSD performance on older ext3 filesystems. Arch Linux Forums Arch Linux Forums +3 How to TRIM ext3 in Linux: Manual TRIM: Run sudo fstrim -v / (replace / with your mount point) to manually discard unused blocks. Automatic/Periodic TRIM: Most modern distributions use fstrim.timer to run this process weekly. Verify with systemctl status fstrim.timer.

lenin386 ★★★★★
()
Ответ на: комментарий от lenin386

Убила её одна вещь - в файлах после выключения питания был мусор. А эти две её добили.

Это вы про Reiserfs, или фантазируете про Reiser4?

Camel ★★★★★
()
Ответ на: комментарий от lenin386

kernels (3.0+)

это потому что появилась возможность использовать один и тот же драйвер ext4.ko для ext2/ext3/ext4, если смонтируешь явно указав -t ext3 трим ругнётся «the discard operation is not supported»

но трим ext3 через ext4 работает коряво и даже может привести к ошибкам, о чём оно прямо сообщало, по крайней мере раньше

madcore ★★★★★
()
Ответ на: комментарий от wandrien

Если я не ошибаюсь, у ufs2 аж 64. Учитывая сильную родственность с ext2 (до сих пор не понимаю, зачем её так сильно форкнули), ситуация очень странная.

Shadow ★★★★★
()
Ответ на: комментарий от madcore

это потому что появилась возможность использовать один и тот же драйвер ext4.ko для ext2/ext3/ext4

И что, этот драйвер переделал ext3 в ext4? Ты сам то понимаешь, что твои аргументы - против тебя же?

lenin386 ★★★★★
()
Ответ на: комментарий от Camel

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

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от lenin386

И что, этот драйвер переделал ext3 в ext4?

в том-то и дело, что нет, и ext3 не стал нормально поддерживать трим, для этого нужно прикрутить экстенты

madcore ★★★★★
()
Ответ на: комментарий от lenin386

Данные теряла, долгое время. Находясь в ядре в не экспериментальном статусе и в дистрибутивах по умолчанию.

Ясно-понятно. А у ext* журнала нет, при этом была в Linux’е не в экспериментальном статусте. Ещё не хватало с тонкостями нейминга и датой фиксов всех фиксов разбираться.

*Вы ведь не станете утверждать, что у ext2 был журнал?

Camel ★★★★★
()
Последнее исправление: Camel (всего исправлений: 1)
Ответ на: комментарий от Camel

ext2 и не обещала их не терять. А тут - обещали. Прекрасно я это помню. Испытательный срок. РРаз питание. День работы - в мусорку. Второй раз. Питание. Ещё день работы в мусорку. А испытательный срок, между прочим. Пришлось сносить, ещё полдня на установку и настройку тратить. Думаешь, было желание после такого ещё тестировать?

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Думаешь, у меня было желание после такого ещё тестировать?

Reiserfs вас подвела, значит Reiser4 (которая не использует кода Reiserfs) тоже подведёт. Да вы ритор от бога.

Camel ★★★★★
()
Ответ на: комментарий от madcore

Следи за руками. ФС изменилась? Нет. Трим стал работать? Стал. Нужна ли поддежка ТРИМ в ФС? Не нужна. Больше тебе скажу, я абсолютно уверен, что SSD этот ваш трим на деле игнорят нахрен, там другие алгоритмы.

lenin386 ★★★★★
()
Ответ на: комментарий от lenin386

Нужна ли поддежка ТРИМ в ФС? Не нужна.

Нужна. Со стороны FS, со стороны накопителя и со стороны контроллера. То, что ext4-драйвер при монтировании ext3 может делать там trim - это исключение и грязный хак и так делать не надо.

абсолютно уверен, что SSD этот ваш трим на деле игнорят нахрен, там другие алгоритмы.

Никогда не говори «никогда», опять упал лицом в лужу.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от lenin386

Нужна ли поддежка ТРИМ в ФС? Не нужна.

man fstrim, далее см. FITRIM(ioctl) и кем эта функция ФС реализуется и чем поддерживается

я абсолютно уверен

ясно

madcore ★★★★★
()
Ответ на: комментарий от lenin386

Владимир Ильич, рассказывайте лучше про APFS

cobold ★★★★★
()
Ответ на: комментарий от lenin386

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

bryak ★★★★
()
Ответ на: комментарий от lenin386

Да кому она нужна эта репутация. Ты еще про честность и спроведливость начни рассказывать. Мир работает по принципу тэйк профИт. Если бы была интересна его поделка - взяли бы ее в оборот и даже не сморщились

bryak ★★★★
()
Ответ на: комментарий от lenin386

Вообще людей, которые способны писать файловые системы - не моря разливаны. На тот момент в линуксах была задача написать надёжную ФС. ext3 таращило от любых манипуляций. Можно было на ровном месте уронить на десктопе раздел, который восстановить было или невозможно или проблематично. Поэтому было три варианта:

  1. взять допилить raiserFS
  2. сделать ext4
  3. взять какую-то еще фс и допилить/перепилить

Мы видим, какой вариант взяли в оборот.

bryak ★★★★
()
Ответ на: комментарий от bryak

Ext3 в то время была rock stable. ReiserFS брали из—за хипстерских фич типа объединения мелких файлов в один блок и мнимой скорости.

lenin386 ★★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

С мелкими файлами он действительно работал быстрей, поэтому его и выбирали. А т.к по поведению он был таким же, как ех3 и fat32(постоянно чекдиск требовал после ресета или зависания), то объективно он казался лучше, чем ех3. То, что рейзерфс был лютым Г поняли только тогда, когда ех4 вышла и все дружно на нее пересели. И всем было пофиг на рэйзер, т.к он уже всех достал

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 4)
Ответ на: комментарий от lenin386

Ext3 в то время была rock stable. ReiserFS брали из—за хипстерских фич типа объединения мелких файлов в один блок и мнимой скорости.

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

CrX ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)