On Sat, Apr 19, 2008 at 12:05:18AM +0300, diver wrote: > С помощью raorn@ удалось выяснить что grub-install выдаёт ошибку: > "The file /boot/grub/stage1 not read correctly." из-за наличия файлов в > корне фс, > которых как я понимаю там быть не должно. > Загрузившись с LiveCD и при попытке удалить их через debugfs получаю: > $rm /.rnd (rm .rnd) > File not found by ext2_lookup while trying to resolve filename > > $kill_file /.rnd (kill_file .rnd) > File not found by ext2_lookup > > Есть другие методы как их удалить? > > fsck на раздел никаких ошибок не находит, и в работе ОС проблем не замечаю. [...] > 881281 40755 (2) 0 0 4096 24-Jan-2006 21:37 sys > < 0> 0 (1) 0 0 0 .rnd > < 0> 0 (1) 0 0 0 .ismount-test-file Похоже, в данном случае неправ grub - судя по коду ext2 в ядре, элементы каталога с de->inode == 0 должны игнорироваться. Например, вот кусок кода из fs/ext2/dir.c:ext2_readdir(): for ( ;(char*)de <= limit; de = ext2_next_entry(de)) { if (de->rec_len == 0) { ext2_error(sb, __FUNCTION__, "zero-length directory entry"); ext2_put_page(page); return -EIO; } if (de->inode) { int over; unsigned char d_type = DT_UNKNOWN; if (types && de->file_type < EXT2_FT_MAX) d_type = types[de->file_type]; offset = (char *)de - kaddr; over = filldir(dirent, de->name, de->name_len, (n<inode), d_type); if (over) { ext2_put_page(page); return 0; } } filp->f_pos += ext2_rec_len_from_disk(de->rec_len); } Функция ext2_match(), используемая в ext2_find_entry() при поиске в каталоге элемента с заданным именем, тоже игнорирует такие элементы: static inline int ext2_match (int len, const char * const name, struct ext2_dir_entry_2 * de) { if (len != de->name_len) return 0; if (!de->inode) return 0; return !memcmp(name, de->name, len); } Следовательно, исправлять надо не файловую систему, а код для работы с ext2 в grub. Вообще подобные элементы могут появляться в каталоге, например, при удалении файла, элемент каталога для которого был первым в блоке (в других случаях освободившееся место просто присоединяется к предыдущему элементу); воспроизвести эту ситуацию можно путём создания и последующего удаления большого количества файлов в каталоге. Обойти проблему можно, если выполнить e2fsck -f -D - при этом пустые записи в каталогах удаляются (особо разросшиеся каталоги оптимизируются и без -D, но одного лишнего блока для автоматического запуска оптимизации недостаточно).