LINUX.ORG.RU
ФорумAdmin

Удалить файл без inode на ext4

 , ,


0

6

Привет. Имеем Ubuntu 18.04. Есть дерево папок на EXT4. Одна из директорий каким-то образом получилась такой:

$ cd ~/Раз/Два
$ ls -lap
d?????????  ? ?        ?            ?            ? 'Рабинович'/
В директории ~/Раз/Два/ кроме Рабинович/ есть другие папки и файлы. Внутри проблемной директории также есть несколько файлов.

Задача — удалить Рабиновича. Как видно, inode отсутствует. Другая проблема: русскоязычные имена. Может, из-за этого debugfs'ный kill_file не смог ничего сделать. Или я не разобрался. В общем, что делать? Нужно обойтись без форматирования.

Ответ на: комментарий от Deleted

В той же папке — есть и папки и файлы. Они отображаются нормально. С ними можно работать. Только Рабиновичу не повезло.

eugenero
() автор топика
Ответ на: комментарий от Deleted

Как я это попробую, если инода нету?

Вот тут, https://unix.stackexchange.com/questions/287947/delete-file-with-missing-inod... человек вструтился с той же проблемой, но сдался.

Как такое может быть, не знаю. Вроде в ext4 есть несколько таблиц на случай повреждения. Вряд ли они все одновременно побились в одном месте.

eugenero
() автор топика

Файловая система похоже крякнула. Тут если чинить, то только инструментами починки ext4 (но только чини на копии, а не оригинале). Ничего ты не сотрешь штатными методами, не пытайся.

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

придётся ребутиться в рекавери.

Почему не?:

$ sudo mount -o remount,ro /
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Ничего не сработало, ни e2fsck, ни debugfs (не находит папку с Рабиновичем, полагаю, из-за русскоязычных имён). Хоть вспоминай юность и дебажь файлуху хекс-едитором. Сложность в том, что это /home и там много гигов... Хер с ним. Пусть будет так. Надеюсь, этот баг не размножается. В любом случае, всё важное забекаплено. Спасибо всем, кто откликнулся.

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

Ничего не сработало

Плохая ситуация, очень плохая. Возникают вопросы: Это связанно именно с ext4, или со всем семейством ext? Причины приводящие к подобным повреждениям фс? На что тратятся служебные блоки семейства ext?

Deleted
()

Вродь в новых ядрах был баг ext4, приводящий к потере данных.
Какая версия ядра ?

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

Была убунта 16.04, там всё было ОК, и корневой и домашний разделы были на ext4. Поставил 18.04 - корневой раздел отформатировал, а домашний оставил. сразу заметил, что дропбокс без остановки крутит свои стрелки, обновляет что-то. Оказалось, это Рабинович окуклился.

При установке было ядро 4.18.0-17. Сейчас *-18.

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

А куда бежать?

Если это именно ext4, то на ext3. А если всё семейство ext, то считай фаталити, у других фс тоже проблемы есть. Хоть мой reiserfs меня ни разу не подводил - это воля случая.

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

А куда бежать?

Если LVM есть ещё вариант держать небольшой home для личной помойки (20-30G), а всё остальное держать отдельным разделом.

Deleted
()

Странно что никто еще не посоветовал начать со смарта диска. А то задача сильно похожа на XY.

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

Он о том, что файл или директория без inode в прицепе не могут существовать. Ну то есть совсем. У тебя файл с некорректными атрибутами, только и всего. Ты банальный

rm -rf
не пробовал?

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)

Внутри проблемной директории также есть несколько файлов.

т.е. проблемная дира имеет содержимое, а значит есть инод который описывает размещение содержимого директории на разделе.

в том или ином случае фс поломат.

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

В этой директории были файлы, пока она ещё была директорией. Иноды этих файлов мне неизвестны, но они, возможно, в порядке.

eugenero
() автор топика

Тут такое дело. Рабинович нашёлся:

$ ext4magic /dev/sda1 -L -f 'user/Раз/Два'
...
DIR     770      user/Раз/Два/Рабинович
...
Каким-то образом ext4magic обнаружила эту директорию, её инод и файлы в ней. Теперь буду думать, как заставить остальные утилиты узнать об этом. На самом деле мне нужно удалить Рабиновича, чтобы не мозолил глаза.

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

Примечательно, что команда

$ ext4magic /dev/sda1 -D -f 'user/Раз/Два' -d /root/save
считала все директории и файлы, включая проблемный.

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

Та же фигня: «Структуру необходимо почистить»

Уточняю: Вот так не получилось?:

$ cd user/Раз/Два
$ find . -inum [inode-number] -exec rm -i {} \;

Где inode-number берётся из выхлопа ext4magic (сам выхлоп не видел, только ман читал).

Deleted
()

Рабинович Никогда не связывайся с евреями. Они в любой ситуации намутят.

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

И так.

В xfs это лечится xfs_repair -L

$man xfs_repair
...
-L     Force  Log  Zeroing.
...

Но в e2fsck я такого не нашёл. (

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

А я подумал, что это inode, который когда-то занимал Рабинович. Как на самом деле — хз

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

Да мне особо обижаться не на что — сам напросился :)

Я не спец по внутреннему устройству ext4. Но, «логика» примерно такая: создается директория

  • в некую структуру (вероятно, родительский каталог) ФС записывается её имя
  • имя связывается с inode
  • inode указывает на содержимое этой директории
  • возможно ещё что-то делается, а главное все* эти операции заносятся в журнал

Теперь посмотрим на этого «Рабиновича». У него потерялся inode. Сам он есть (т.е. родительский каталог цел) и в нём содержатся файлы (вот это я не совсем понимаю; но, это «нормально» — я во внутреннем устройстве ext4 не разбираюсь). Вот я и подумал, а «где» сейчас этот inode.

По теме: эта «поломка», видимо, очень не типичная. Поэтому и не получается её устранить. Самый «простой» способ — перенести данные и пересоздать ФС. Другой вариант: разбираться в устройстве ext4 и пытаться откатить ситуацию до нормального состояния.

UPDATE
Никто не предложил такой способ

  • копируешь содержимое ~/Раз/Два куда-то, главное Рабиновича не бекапь
  • сносишь этот каталог Два (вот здесь может и не получиться)
  • восстанавливаешь из бекапа
anymouze ★★
()
Ответ на: комментарий от anymouze

Снести как раз и не получается. Видимо функции rm, find и прочие основаны на одной либе, которая не может переварить эту ситуацию, а ext4magic — на другой. Точнее, ext4magic, похоже, сама реализует логику работы с ФС, потому что в её зависимостях есть только библиотека работы с блочными устройствами и другая, для расширенных атрибутов.

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

Видимо функции rm, find и прочие основаны на одной либе

в её зависимостях есть только библиотека работы с блочными устройствами и другая, для расширенных атрибутов.

Вообще-то у всех в зависимостях неявно присутствует ядро, и с дисковым форматом ФС взаимодействие обычно оно. Так что говорить в первом случае следует не о «либе».

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

функции rm, find и прочие основаны на одной либе

они работают с текущим состоянием ФС

ext4magic

использует журнал ФС для реконструкции (наверно, и другие какие-то методы тоже)

А какие-то операции с этим каталогом (копирование, перемещение, переименование, смена прав, ...) успехом завершались? Какое-то особое стечение внешних факторов создало «уникальный» объект ФС. В принципе это баг.

anymouze ★★
()

Одна из директорий каким-то образом получилась такой:

Каким образом?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.