Короткая версия : rm -rf mydir
с mydir
(рекурсивно) содержащим 2,5 миллиона файлов занимает около 12 часов на простаивающей машине.
Дополнительная информация : Большинство файлов, удаленных являются жесткими ссылками на файлы в других каталогах (каталог удаляется на самом деле старая резервная копия сделано rsnapshot
, а rm
команда на самом деле дается rsnapshot
). Таким образом, в основном удаляются записи каталога - само содержимое файла невелико; это порядка нескольких десятков ГБ.
Я далеко не уверен, что btrfs
это виновник. Я помню, резервное копирование также было очень медленным, прежде чем я начал использовать btrfs
, но я не уверен, что медлительность была в удалении.
Машина представляет собой Intel Core i5 2,67 ГГц с 4 ГБ оперативной памяти. Он имеет два диска SATA: на одном установлена ОС, а на другом - резервный диск емкостью 1 ТБ WDC WD1002FAEX-00Z3A0
. Материнская плата - Asus P7P55D.
Изменить : машина является Debian Wheezy с Linux 3.16.3-2~bpo70+1
. Вот как смонтирована файловая система:
root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Изменить : Использование rsync -a --delete /some/empty/dir mydir
занимает около 6 часов. Значительное улучшение по сравнению с rm -rf
, но все же слишком много, я думаю. ( Объяснение того, почему rsync
это быстрее, чемrm
: «[M] Остальные файловые системы хранят свои структуры каталогов в формате btree, порядок [in], в котором вы удаляете файлы, ... важен. Необходимо избегать перебалансировки btree при выполнении разыменования .... rsync -a --delete
... делает удаление по порядку ")
Редактировать : я прикрепил другой диск, который имел 2,2 миллиона файлов (рекурсивно) в каталоге, но на XFS. Вот некоторые сравнительные результаты:
On the XFS disk On the BTRFS disk
Cached reads[1] 10 GB/s 10 GB/s
Buffered reads[1] 80 MB/s 115 MB/s
Walk tree[2] 11 minutes 43 minutes
rm -rf mydir[3] 7 minutes 12 hours
[1] С hdparm -T /dev/sdX
и hdparm -t /dev/sdX
.
[2] Время, необходимое для запуска find mydir -print|wc -l
сразу после загрузки.
[3] На диске XFS это было вскоре после прогулки по дереву find
. На диске BTRFS это старое измерение (и я не думаю, что оно было с кэшированным деревом).
Похоже, проблема с btrfs
.
btrfs
? Это возможно, конечно, но как вы думаете, это может быть актуально? Прямо сейчас я не могу вспомнить, почему я решил попробовать btrfs
.
btrfs
потому что я хотел прозрачное сжатие. Сейчас: rsnapshot
использует жесткие ссылки. У него нет никакой возможности не использовать жесткие ссылки. Таким образом, жесткие ссылки пересекаются с btrfs
функцией копирования при записи, но я ничего не могу с этим поделать.