Ограничение глубины вложенного каталога в ext4

В данном конкретном случае было бы проще просто выполнить ls -lи действовать непосредственно на его статус выхода:

if ls -l "$local_path"; then
    echo 'success'
else
    printf 'failure (code %d)\n' "$?"
fi | tee -a "$log_path_file"

В оболочке bashвы также можете исследовать значения в массиве PIPESTATUS:

$ false | true | true | false | false
$ printf '%s\n' "${PIPESTATUS[@]}"
1
0
0
1
1

В вашем случае:

ls -l "$local_path" | tee -a "$log_path_file"

ls_status=${PIPESTATUS[0]}
if [ "$ls_status" -eq 0 ]; then
    echo 'success'
else
    printf 'failure (code %d)\n' "$ls_status"
fi | tee -a "$log_path_file"
2
04.07.2020, 11:53
2 ответа

Согласно ext (4)справочной странице, раздел оdir_nlink

Normally, ext4 allows an inode to have no more than 65,000 hard links. This applies to regular files as well as directories, which means there can be no more than 64,998 subdirectories in a directory (because each of the '.' and '..' entries, as well as the directory entry for the directory in its parent directory counts as a hard link). This feature lifts this limit by causing ext4 to use a link count of 1 to indicate that the number of hard links to a directory is not known when the link count might exceed the maximum count limit.

Другими словами, если функция dir_nlinkвключена, -ограничений нет, в противном случае --64k подкаталогов. Вы можете проверить, включена ли эта функция с помощью sudo dumpe2fs /dev/sda1 | grep --color=always dir_nlink. Его можно отключить, возможно, для совместимости с устаревшими системами через tune2fs.

Другие источники:

-5
18.03.2021, 23:22

Нет никаких ограничений, присущих самой структуре файловой системы, и эксперименты (благодаря ilkkachu)показывают, что каталоги могут быть вложены на глубину, превышающую пределы, которые можно было бы наивно ожидать (PATH_MAX, 4096 в Linux, хотя это ограничивает длину путей, передаваемых системным вызовам, и его можно обойти с помощью относительных путей ).

Часть реализации, по-видимому, предполагает, что общая длина пути внутри данной файловой системы никогда не превышает PATH_MAX; см. функции хеширования каталогов , которые выделяют PATH_MAXбайт.

Единственное ограничение, связанное с каталогом -, которое, по-видимому, проверено в реализации файловой системы, — это длина отдельного компонента пути , которая ограничена 255 байтами; но это не имеет никакого отношения к глубине вложенности.

10
18.03.2021, 23:22

Теги

Похожие вопросы