Мы делаем и продаем программно-аппаратный комплекс, т.е. железку с софтом.
Внутри стоит крайне порезанная убунта с нашим софтом. Убунта запакована в squashfs образ, который лежит на флешке.
Поверх него монтируется раздел с настройками через overlayfs.
Иногда после неприятной перезагрузки всё ломается и подмонтировать всё таким пирогом не получается.
Сообщение при этом в ядре от overlayfs:
overlayfs: bad index found (index=index/00fb1d000100000000000000000000000000000000c100000000000000, ftype=2000, origin ftype=8000).
Как мы с этим работали?
Проблема где-то в районе: https://vcs.cs.uchicago.edu/kauffman/ubuntu-mainline-crack/blob/master/fs/overlayfs/namei.c#L724
Не знаю, будет ли ещё доступен код по ссылке, так что немного покажу его:
} else if (ovl_dentry_weird(index) || ovl_is_whiteout(index) ||
((inode->i_mode ^ d_inode(origin)->i_mode) & S_IFMT)) {
/*
* Index should always be of the same file type as origin
* except for the case of a whiteout index. A whiteout
* index should only exist if all lower aliases have been
* unlinked, which means that finding a lower origin on lookup
* whose index is a whiteout should be treated as an error.
*/
pr_warn_ratelimited("overlayfs: bad index found (index=%pd2, ftype=%x, origin ftype=%x).\n",
index, d_inode(index)->i_mode & S_IFMT,
d_inode(origin)->i_mode & S_IFMT);
goto fail;
К сожалению, по сути единственный рабочий способ на сегодня — выполнять самостоятельный overlay-fsck из initrd на загрузке. Для этого надо кусочком кода обойти все файлы на слоеной ФС и те, которые не получится просто открыть, надо удалить из upper dir (т.е. непосредственно с rw раздела).
Ещё workdir должен быть опустошен перед собиранием пирога.
вот такая грустная история =(