История изменений
Исправление firkax, (текущая версия) :
Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.
Что бы это всё привести в консистентное состояние, надо всю рантайм информацию об открытых файлах принудительно сверить с состоянием диска и инвалидировать те, которых на диске нет, и скорректировать те, что есть, если метаданные на диске отличаются. Просто «выбросить всё» и прочитать заново нельзя - эти данные привязаны к открытым дескрипторам.
Исправление firkax, :
Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.
Что бы это всё привести в консистентное состояние, надо всю рантайм информацию об открытых файлах принудительно сверить с состоянием диска и инвалидировать те, которых на диске нет, и скорректировать те, что есть, если метаданные на диске отличаются.
Исправление firkax, :
Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.
Исправление firkax, :
Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно. А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.
Исходная версия firkax, :
Я не про кеш а про то что например блоки, на которых расположена открытая инода, скорее всего не перечитываются с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно. А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.