Автор Гілка: Чому Ext4, XFS і Btrfs можуть втрачати файли  (Прочитано 4163 раз)

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3857
  • Карма: +13/-0
  • Програміст
Досить детальне пояснення проблеми з файлами від Theodore Ts'o:
https://bugs.edge.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/54.

Якщо коротко, то проблема в тому, що сучасні файлові системи відкладають виділення місця на диску для файлів аж до етапу синхронізації кешу з диском. Програмістам рекомендується виконувати fsync(file_descriptor) чи fdatasync(file_descriptor) самостійно та перевіряти результат завершення цієї операції.
[Fedora Linux]

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #1 : 2009-03-08 17:27:55 »
спасибі, дуже гарне пояснення. а є ж ніби можливість на рівні юзера регулювати отой час, після якого дані скидаються з кешу на диск? може хтось нагадати, де це робиться?

а поза тим 30 секунд на лептопі — це цілком нормально, бо є ж в нього батарея, і ніяких несподіванок в плані живлення немає.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Praporshic

  • Гість
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #2 : 2009-03-08 23:40:35 »
Дякую за вчасне повідомлення. А я вже зібрався мігрувати /home на ext4.....

Відсутній Ayello

  • Кореспондент
  • ***
  • дописів: 108
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #3 : 2009-03-09 13:29:28 »
Доброго!
Тобто, якщо напруга впаде в цей самий період синхронізації, то, поточні  данні будуть втрачені (але не данні попередньої синхронізації).
Я встановив всі розділи на xfs (експериментував з jfs, та несподіванкою стало відсутність засобів дефрагментаціїї).

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3857
  • Карма: +13/-0
  • Програміст
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #4 : 2009-03-09 14:12:48 »
Доброго!
Тобто, якщо напруга впаде в цей самий період синхронізації, то, поточні  данні будуть втрачені (але не данні попередньої синхронізації).
Не записані дані будуть втрачені в будь якій ФС. Проблема в тому, що XFS (ext4 не пробував ще) може попсути файл через те, що метадані файла були оновлені (напр. ім’я файлу вже змінилося) а дані у файлі - ще ні. В результаті частина файла виходить попсута - кілька блоків можуть бути забиті нулями.

Реально проблему може вирішити тільки введення транзакцій - щоб можна було вказати, що операція зміни файлу і його перейменування - це частини однієї транзакції, тому їх не можна виконувати в іншому порядку.
[Fedora Linux]

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #5 : 2009-03-09 14:54:18 »
Цитата
несподіванкою стало відсутність засобів дефрагментаціїї
навіщо вам дефрагментація?? :o

не знаю, навіщо юзати на десктопі щось  відмінне від старої доброї ext3. не звернув уваги, що те зауваження стосується ext4, не ext3.

Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #6 : 2009-03-09 14:58:33 »
спасибі, дуже гарне пояснення. а є ж ніби можливість на рівні юзера регулювати отой час, після якого дані скидаються з кешу на диск? може хтось нагадати, де це робиться?
https://bugs.edge.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/7

Цитата
How aggressively the system writes things back out to disk can be controlled via some tuning parameters, in particular /proc/sys/vm/dirty_expire_centisecs and /proc/sys/vm/dirty_writeback_centisecs. The latter, in particular will be adjusted by laptop_mode and other tools that are trying to extend battery lifespans.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #7 : 2009-03-09 15:01:56 »
і ше дуже корисний коментар:
https://bugs.edge.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/45

Цитата
So, why wasn't this a problem before in the past? Well, ext3 by default has a commit interval of 5 seconds, and has data=ordered. What does this mean? Well, every 5 seconds, the ext3 journal is committed; this means that any changes in since the last commit are now guaranteed to survive an unclean shutdown. The journalling mode data=ordered means that only metadata is written in the journal, but data is ordered; this means that before the commit takes place, any data blocks are associated with inodes that are about to be committed in that transaction will be forced out to disk. This is primarily done for security reasons; if this was not done, then any newly allocated blocks might still contain previous data belonging to some other file or user, and after a crash, accessing that file might result in a user seeing someone else's mail or p0rn, and that's unacceptable from a security perspective.

However, this had the side effect of essentially guaranteeing that anything that had been written was guaranteed to be on disk after 5 seconds. (This is somewhat modified if you are running on batteries and have enabled laptop mode, but we'll ignore that for the purposes of this discussion.) Since ext3 became the dominant filesystem for Linux, application writers and users have started depending on this, and so they become shocked and angry when their system locks up and they lose data --- even though POSIX never really made any such guaranteed.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній Ayello

  • Кореспондент
  • ***
  • дописів: 108
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #8 : 2009-03-09 15:47:22 »
Цитата
несподіванкою стало відсутність засобів дефрагментаціїї
навіщо вам дефрагментація?? :o
Прибування в "Віндовс" на ntfs (та відсутність альтернатив окрім FAT, де дефрагментація є складовою працездатності) та можливість реалізувати вибір в "Линукс", підштовхує до новаторства та експерименту (для остаточного вибору).

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #9 : 2009-03-09 15:51:36 »
Цитата
несподіванкою стало відсутність засобів дефрагментаціїї
навіщо вам дефрагментація?? :o
Прибування в "Віндовс" на ntfs (та відсутність альтернатив окрім FAT, де дефрагментація є складовою працездатності) та можливість реалізувати вибір в "Линукс", підштовхує до новаторства та експерименту (для остаточного вибору).
тоді вам сюди:
http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting
просто і з малюнками там пояснюється, чому в лінуксі не треба робити дефрагментацію.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

anonymous

  • Гість
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #10 : 2009-03-10 11:29:31 »
Насправді дефрагментація потрібна. Сучасні файлові системи непогано боряться з фрагментацією файлів, але вкрай паскудно з фрагментацією вільного простору. Не раз було, що через півроку використання з інтенсивним перезаписом купи файлів ext3/reiserfs починали безсовісно гальмувати. Дефрагментація за допомогою mv туди-сюди (на інший розділ і назад) значно покращувала швидкодію. З xfs простіше, там є свій онлайновий дефрагментатор, у ext4 теж обіцяють таке прикрутити, вже начебто і патчі відповідні є.

Відсутній gvy

  • Письменник
  • *****
  • дописів: 576
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #11 : 2009-03-11 12:34:51 »
Проблема в тому, що XFS (ext4 не пробував ще) може попсути файл через те, що метадані файла були оновлені (напр. ім’я файлу вже змінилося) а дані у файлі - ще ні. В результаті частина файла виходить попсута - кілька блоків можуть бути забиті нулями.
Ні, в xfs це є security feature -- нулі (а не сміття) народжуються при відкачуванні журналу там, де виникає підозра на потрапляння "чужих" блоків (щоб уникнути leak'ів конфіденційної інформації).

Рік чи півтора тому щось там шубуршалися щодо того, щоб зробити це конфігурабельним, але поки не чув, вже/ще ні/ні.

PS: це тільки мене lougaut'нуло?

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #12 : 2009-03-12 22:47:34 »
Цитата
Ні, в xfs це є security feature -- нулі (а не сміття) народжуються при відкачуванні журналу там, де виникає підозра на потрапляння "чужих" блоків (щоб уникнути leak'ів конфіденційної інформації).
ну ніби так само в ext4 це з міркувань безпеки.

ось те саме в блозі Теодора: http://thunk.org/tytso/blog/2009/03/12/delayed-allocation-and-the-zero-length-file-problem/
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3857
  • Карма: +13/-0
  • Програміст
Re: Чому Ext4, XFS і Btrfs можуть втрачати файли
« Відповідей #13 : 2009-03-26 12:40:51 »
Цитата
Date      Tue, 24 Mar 2009 10:55:40 -0700 (PDT)
From      Linus Torvalds <>
Subject      Re: Linux 2.6.29


On Tue, 24 Mar 2009, Theodore Tso wrote:
>
> Try ext4, I think you'll like it.  :-)
>
> Failing that, data=writeback for single-user machines is probably your
> best bet.

Isn't that the same fix? ext4 just defaults to the crappy "writeback"
behavior, which is insane.
Sure, it makes things _much_ smoother, since now the actual data is no
longer in the critical path for any journal writes, but anybody who thinks
that's a solution is just incompetent.

We might as well go back to ext2 then. If your data gets written out long
after the metadata hit the disk, you are going to hit all kinds of bad
issues if the machine ever goes down.

                  Linus
Цитата
     
Date      Tue, 24 Mar 2009 12:17:42 -0700 (PDT)
From      Linus Torvalds <>
Subject      Re: Linux 2.6.29

On Tue, 24 Mar 2009, Kyle Moffett wrote:
>
> Regardless of any journalling, a power-fail or a crash is almost
> certainly going to cause "data loss" of some variety.

The point is, if you write your metadata earlier (say, every 5 sec) and
the real data later (say, every 30 sec), you're actually MORE LIKELY to
see corrupt files than if you try to write them together.

And if you write your data _first_, you're never going to see corruption
at all.

This is why I absolutely _detest_ the idiotic ext3 writeback behavior. It
literally does everything the wrong way around - writing data later than
the metadata that points to it. Whoever came up with that solution was a
moron. No ifs, buts, or maybes about it.

                  Linus
[Fedora Linux]