Versão curta : rm -rf mydir
, com mydir
(recursivamente) contendo 2,5 milhões de arquivos, leva cerca de 12 horas em uma máquina quase inativa.
Mais informações : A maioria dos arquivos excluídos é links físicos para arquivos em outros diretórios (o diretório que está sendo excluído é, na verdade, o backup mais antigo feito por rsnapshot
; o comando rm
é realmente dado por rsnapshot
). Portanto, a maioria das entradas do diretório está sendo excluída - o conteúdo do arquivo em si não é muito; é da ordem de algumas dezenas de GB.
Estou longe de ter certeza de que btrfs
é o culpado. Lembro-me de backup também foi muito lento antes de começar a usar btrfs
, mas não tenho certeza de que a lentidão estava na exclusão.
A máquina é uma Intel Core i5 de 2,67 GHz com 4 GB de RAM. Ele tem dois discos SATA: um tem o sistema operacional e algumas outras coisas, e o disco de backup é de 1 TB WDC WD1002FAEX-00Z3A0
. A placa-mãe é uma Asus P7P55D.
Editar : A máquina é um wheezy do Debian com o Linux 3.16.3-2~bpo70+1
. É assim que o sistema de arquivos é montado:
root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Editar : usar rsync -a --delete /some/empty/dir mydir
demora cerca de 6 horas. Uma melhoria significativa sobre rm -rf
, mas ainda muito eu acho. ( Explicação de por que rsync
é mais rápido que rm
: "[M] ost filesystems armazena suas estruturas de diretório em um btree formato, a ordem [no] que você excluir arquivos é ... importante. É necessário evitar rebalancing a btree quando você realizar o unlink .... rsync -a --delete
... faz exclusões em ordem ")
Editar : Anexei outro disco que tinha 2,2 milhões de arquivos (recursivamente) em um diretório, mas no XFS. Aqui estão alguns resultados comparativos:
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] Com hdparm -T /dev/sdX
e hdparm -t /dev/sdX
.
[2] Tempo gasto para executar find mydir -print|wc -l
imediatamente após a inicialização.
[3] No disco XFS, isso foi logo depois de andar na árvore com find
. No disco BTRFS, é a medida antiga (e não acho que foi com a árvore armazenada em cache).
Parece ser um problema com btrfs
.