Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-08 Par sujet Daniel Caillibaud
Le 07/04/21 à 21:45, Étienne Mollier  a écrit :
> Si le répertoire est vide, alors les commandes suivantes
> devraient faire l'affaire pour récupérer les 959M restants :
> 
>   $ sudo rmdir /var/lib/php/sessions
>   $ sudo mkdir /var/lib/php/sessions

Oui, mais attention aux droits, les regarder avant de supprimer le dossier, sur 
mes machines
avec du php il est en 733 avec le sticky bit activé (drwx-wx-wt => les fichiers 
créés dedans
sont alors en 600, sous le user qui les crée, celui du pool php concerné, seul 
root peut les
lister tous, sinon chaque user peut lister/lire/modifier les siens uniquement).

Il faudrait dans ce cas ajouter un 

   $ sudo chmod 1733 /var/lib/php/sessions

-- 
Daniel

Mieux vaut s'attendre au prévisible que d'être surpris
par l'inattendu.
Pierre Dac



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-07 Par sujet Étienne Mollier
Bonjour,

> Le 7 avr. 2021 à 18:31, JUPIN Alain  a écrit :
> > Par contre, il me reste encore un petit souci. Pour info, la commande prend 
> > environ 40sec pour s’exécuter !
> > 
> > root@kepler:/var/lib/php/sessions# ls -alh
> > total 959M
> > drwxr-xr-x  2 root root 959M avril  7 09:40 .
> > drwxr-xr-x 10 root root 4,0K juil.  7  2019 ..
> > 
> > Du coup, je me demande ou se trouve ces 959 M et s'il ne reste pas un 
> > résidu quelconque quelques part !

Pierre Malard, on 2021-04-07 18:47:15 +0200:
> J’aurais tendance à répondre dans le point ;-)

Oui, étant donné que la quantité de fichier initialement
présente dépassait allègrement la cinquantaine de millions, la
table des inodes, "stockée" dans ".", a peut-être un peu
d'embonpoint.  Elle a été allouée dynamiquement au fur et à
mesure que les fichiers se sont ajoutés, mais elle n'est pas
ajustée dans l'autre sens après ménage dans les fichiers.

> Peut-être qu’un petit fsck ou xfs_repair selon le gestionnaire de fichiers 
> s’impose…

Si le répertoire est vide, alors les commandes suivantes
devraient faire l'affaire pour récupérer les 959M restants :

$ sudo rmdir /var/lib/php/sessions
$ sudo mkdir /var/lib/php/sessions

Sinon, il faudra probablement prévoir une bascule vers un
nouveau répertoire qui remplacera le sessions/ existant.

Bonne soirée,
-- 
Étienne Mollier 
Fingerprint:  8f91 b227 c7d6 f2b1 948c  8236 793c f67e 8f0d 11da
Sent from /dev/pts/2, please excuse my verbosity.


signature.asc
Description: PGP signature


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-07 Par sujet Pierre Malard
Salut,

J’aurais tendance à répondre dans le point ;-)

Peut-être qu’un petit fsck ou xfs_repair selon le gestionnaire de fichiers 
s’impose…

> Le 7 avr. 2021 à 18:31, JUPIN Alain  > a écrit :
> 
> Bonjour,
> 
> Merci pour vos retours et au final avec find cela m'a pris presque 24H pour 
> tout supprimer, sans affecter notablement les performances du serveur.
> 
> Par contre, il me reste encore un petit souci. Pour info, la commande prend 
> environ 40sec pour s’exécuter !
> 
> root@kepler:/var/lib/php/sessions# ls -alh
> total 959M
> drwxr-xr-x  2 root root 959M avril  7 09:40 .
> drwxr-xr-x 10 root root 4,0K juil.  7  2019 ..
> 
> Du coup, je me demande ou se trouve ces 959 M et s'il ne reste pas un résidu 
> quelconque quelques part !
> 
> Alain JUPIN
> 
> Le 04/04/2021 à 09:30, JUPIN Alain a écrit :
>> Bonjour
>> 
>> Petit casse tête du dimanche matin !
>> 
>> Sur un serveur LAMP à base de Debian10 (à jour en version 10.9), j'ai noté 
>> des lenteurs et le syslog est sans équivoque :
>> [4958833.739887] EXT4-fs warning (device sda3): ext4_dx_add_entry:2258: 
>> Directory (ino: 18612230) index full, reach max htree level :2
>> [4958833.739889] EXT4-fs warning (device sda3): ext4_dx_add_entry:2262: 
>> Large directory feature is not enabled on this filesystem
>> 
>> Après analyse, je ne dépasse pas le nombre max d'inodes du système de 
>> fichier (j'en suis à 9% d'utilisé), par contre, le répertoire 
>> /var/lib/php/sessions/ contient 56 781 542 fichiers
>> J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
>> Mais après plusieurs heures la commande échoue avec "trop d'arguments"
>> 
>> Bref ce matin, il y a deux heures, je tente une nouvelle approche : rsync -a 
>> --delete /tmp/empty/ /var/lib/php/sessions/
>> avec bien sur /tmp/empty qui est vide
>> Mais après deux heures de fonctionnement, je n'ai aucun retour de la 
>> commande !
>> 
>> Du coup connaissez vous une méthode "rapide" pour effacer plusieurs millions 
>> de fichiers d'un répertoire !
>> 
>> PS : Par contre, je ne comprend pas la présence de ses fichiers, car j'ai 
>> bien un cron qui se lance toutes les demi-heures pour supprimer les 
>> sessions. Va falloir que j'élucide ce mystère !
>> 
>> 
>> --
>> Alain JUPIN
>> Lumières d'Ici ... et d'Ailleurs 

--
Pierre Malard

   « L'émancipation politique doit marcher de pair avec l'émancipation
sociale ou les résultats sont désastreux »
Romain Gary - "Les racines du ciel"
   |\  _,,,---,,_
   /,`.-'`'-.  ;-;;,_
  |,4-  ) )-,_. ,\ (  `'-'
 '---''(_/--'  `-'\_)   πr

perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-.  ;-;;,_:  |,A-  ) )-,_. ,\ 
(  `'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"'  `-'"'"'\_): 
24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print'
- --> Ce message n’engage que son auteur <--



signature.asc
Description: Message signed with OpenPGP


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-07 Par sujet JUPIN Alain

Bonjour,

Merci pour vos retours et au final avec find cela m'a pris presque 24H 
pour tout supprimer, sans affecter notablement les performances du serveur.


Par contre, il me reste encore un petit souci. Pour info, la commande 
prend environ 40sec pour s’exécuter !


root@kepler:/var/lib/php/sessions# ls -alh
total 959M
drwxr-xr-x  2 root root 959M avril  7 09:40 .
drwxr-xr-x 10 root root 4,0K juil.  7  2019 ..

Du coup, je me demande ou se trouve ces 959 M et s'il ne reste pas un 
résidu quelconque quelques part !


Alain JUPIN

Le 04/04/2021 à 09:30, JUPIN Alain a écrit :

Bonjour

Petit casse tête du dimanche matin !

Sur un serveur LAMP à base de Debian10 (à jour en version 10.9), j'ai 
noté des lenteurs et le syslog est sans équivoque :
[4958833.739887] EXT4-fs warning (device sda3): 
ext4_dx_add_entry:2258: Directory (ino: 18612230) index full, reach 
max htree level :2
[4958833.739889] EXT4-fs warning (device sda3): 
ext4_dx_add_entry:2262: Large directory feature is not enabled on this 
filesystem


Après analyse, je ne dépasse pas le nombre max d'inodes du système de 
fichier (j'en suis à 9% d'utilisé), par contre, le répertoire 
/var/lib/php/sessions/ contient 56 781 542 fichiers

J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
Mais après plusieurs heures la commande échoue avec "trop d'arguments"

Bref ce matin, il y a deux heures, je tente une nouvelle approche : 
rsync -a --delete /tmp/empty/ /var/lib/php/sessions/

avec bien sur /tmp/empty qui est vide
Mais après deux heures de fonctionnement, je n'ai aucun retour de la 
commande !


Du coup connaissez vous une méthode "rapide" pour effacer plusieurs 
millions de fichiers d'un répertoire !


PS : Par contre, je ne comprend pas la présence de ses fichiers, car 
j'ai bien un cron qui se lance toutes les demi-heures pour supprimer 
les sessions. Va falloir que j'élucide ce mystère !



--
Alain JUPIN
Lumières d'Ici ... et d'Ailleurs 




Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-06 Par sujet Olivier
Bonjour,

Plutôt que supprimer les fichiers indésirables, serait-il possible de
successivement
- déplacer les fichiers désirables dans un autre répertoire (j'imagine
qu'il y en a moins)
- supprimer le répertoire qui ne contient plus que des indésirables,
- ré-arranger le tout

Le dim. 4 avr. 2021 à 09:38, JUPIN Alain  a écrit :

> Bonjour
>
> Petit casse tête du dimanche matin !
>
> Sur un serveur LAMP à base de Debian10 (à jour en version 10.9), j'ai noté
> des lenteurs et le syslog est sans équivoque :
> [4958833.739887] EXT4-fs warning (device sda3): ext4_dx_add_entry:2258:
> Directory (ino: 18612230) index full, reach max htree level :2
> [4958833.739889] EXT4-fs warning (device sda3): ext4_dx_add_entry:2262:
> Large directory feature is not enabled on this filesystem
>
> Après analyse, je ne dépasse pas le nombre max d'inodes du système de
> fichier (j'en suis à 9% d'utilisé), par contre, le répertoire
> /var/lib/php/sessions/ contient 56 781 542 fichiers
> J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
> Mais après plusieurs heures la commande échoue avec "trop d'arguments"
>
> Bref ce matin, il y a deux heures, je tente une nouvelle approche : rsync
> -a --delete /tmp/empty/ /var/lib/php/sessions/
> avec bien sur /tmp/empty qui est vide
> Mais après deux heures de fonctionnement, je n'ai aucun retour de la
> commande !
>
> Du coup connaissez vous une méthode "rapide" pour effacer plusieurs
> millions de fichiers d'un répertoire !
>
> PS : Par contre, je ne comprend pas la présence de ses fichiers, car j'ai
> bien un cron qui se lance toutes les demi-heures pour supprimer les
> sessions. Va falloir que j'élucide ce mystère !
>
>
> --
> Alain JUPIN
> Lumières d'Ici ... et d'Ailleurs 
>


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-05 Par sujet Pierre-Elliott Bécue
Le dimanche 04 avril 2021 à 09:30:45+0200, JUPIN Alain a écrit :
> Bonjour
> 
> Petit casse tête du dimanche matin !
> 
> Sur un serveur LAMP à base de Debian10 (à jour en version 10.9), j'ai noté des
> lenteurs et le syslog est sans équivoque :
> [4958833.739887] EXT4-fs warning (device sda3): ext4_dx_add_entry:2258:
> Directory (ino: 18612230) index full, reach max htree level :2
> [4958833.739889] EXT4-fs warning (device sda3): ext4_dx_add_entry:2262: Large
> directory feature is not enabled on this filesystem
> 
> Après analyse, je ne dépasse pas le nombre max d'inodes du système de fichier
> (j'en suis à 9% d'utilisé), par contre, le répertoire /var/lib/php/sessions/
> contient 56 781 542 fichiers
> J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
> Mais après plusieurs heures la commande échoue avec "trop d'arguments"
> 
> Bref ce matin, il y a deux heures, je tente une nouvelle approche : rsync -a
> --delete /tmp/empty/ /var/lib/php/sessions/
> avec bien sur /tmp/empty qui est vide
> Mais après deux heures de fonctionnement, je n'ai aucun retour de la commande 
> !
> 
> Du coup connaissez vous une méthode "rapide" pour effacer plusieurs millions 
> de
> fichiers d'un répertoire !
> 
> PS : Par contre, je ne comprend pas la présence de ses fichiers, car j'ai bien
> un cron qui se lance toutes les demi-heures pour supprimer les sessions. Va
> falloir que j'élucide ce mystère !

Le rsync est la méthode la plus rapide en matière de performances.

-- 
Pierre-Elliott Bécue
GPG: 9AE0 4D98 6400 E3B6 7528  F493 0D44 2664 1949 74E2
It's far easier to fight for one's principles than to live up to them.


signature.asc
Description: PGP signature


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet Fabrice Bauzac-Stehly
Jean-Damien Durand  writes:

> find /tmp -cmin +30 -type f -exec rm -f {} \;

Utilise -delete pour que ca aille plus vite:

  find /tmp -cmin +30 -type f -delete

-- 
Fabrice Bauzac-Stehly
PGP 01EEACF8244E9C14B551C5256ADA5F189BD322B6
old PGP 015AE9B25DCB0511D200A75DE5674DEA514C891D



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet didier gaumet

Le 04/04/2021 à 09:30, JUPIN Alain a écrit :
[...]
[4958833.739887] EXT4-fs warning (device sda3): ext4_dx_add_entry:2258: 
Directory (ino: 18612230) index full, reach max htree level :2
[4958833.739889] EXT4-fs warning (device sda3): ext4_dx_add_entry:2262: 
Large directory feature is not enabled on this filesystem

[...]

j'ai l'impression que tu peux supprimer ces deux warnings en activant 
l'option large_dir dans /etc/fstab pour ce montage particulier (tu peux 
aussi le faire à chaud par un tune2fs mais cela devrait être

 perdu au prochain montage)

cf les manpages de etx4 et tune2fs ainsi que ce lien:

https://pzel.name/til/2020/08/30/Large-directory-feature-not-enabled-on-this-filesystem.html



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet l0f4r0
4 avr. 2021, 10:39 de bas...@starynkevitch.net:

>
> On 4/4/21 10:29 AM, JUPIN Alain wrote:
>
>
>>   Par contre lancer 56 millions de fois la copmmande rm, ca risque  de 
>> prendre un temps de dingue, mais avec -print on a au moins  l'impression 
>> que "ca avance" lol
>>
>
> Sur un PC moderne, le lancé d'un processus prend quelques  millisecondes. 
> Donc 56 millions de fois, ca prendra quelques  heures.
>
>
En parlant de perfs, je pense Alain que t'y gagnerais probablement en utilisant 
également l'option `-P` de xargs (en coordination avec `-n`).

Après faut voir si ton processeur le permet mais l'idée est de paralléliser les 
process lancés par xargs.

Vu la volumétrie concernée, ça peut faire gagner du temps :)

l0f4r0



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet Basile Starynkevitch


On 4/4/21 10:29 AM, JUPIN Alain wrote:

Le 04/04/2021 à 09:50, Jean-Damien Durand a écrit :


Sans prétendre que ce soit plus rapide, tu n'auras pas le problème de 
"trop d'arguments" en faisant:


    find /tmp -cmin +30 -type f -exec rm -f {} \;

Tu peux rajouter -print pour le voir avancer.

J'ai rajouté -type f puisque tu ne parles que de fichiers.



Je me demande en le lisant pourquoi je n'y ai même pas pensé

Par contre lancer 56 millions de fois la copmmande rm, ca risque de 
prendre un temps de dingue, mais avec -print on a au moins 
l'impression que "ca avance" lol



Sur un PC moderne, le lancé d'un processus prend quelques millisecondes. 
Donc 56 millions de fois, ca prendra quelques heures.


Une alternative est bien sûr d'*améliorer* le code d'un *shell existant 
codé* en C.


Par exemple GNU bash  ou zsh 
 ... On peut aussi modifier sash 
 


Ou lire /Advanced Linux Programming/ 
 (en 
anglais) et utiliser nftw(3) 
 avec unlink(2) 
 et d'autres 
syscalls(2) 



--


Basile Starynkevitch  
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet JUPIN Alain

Le 04/04/2021 à 10:10, l0f...@tuta.io a écrit :

4 avr. 2021, 10:02 de l0f...@tuta.io:


Tu peux limiter le nb de ses arguments par commande lancée en utilisant 
l'option `-n`.

Tant que t'y es, pour garder un œil sur les commandes générées, t'as qu'à aussi 
utiliser l'option `-t`.


Précision : je parle des options de `xargs`

l0f4r0



Merci pour l'info, j'avoue que je ne connaissais pas cette astuce (n'en 
ayant jamais eu le besoin jusqu'à maintenant).


Alain JUPIN
Lumières d'Ici ... et d'Ailleurs 


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet JUPIN Alain

Le 04/04/2021 à 09:50, Jean-Damien Durand a écrit :


Sans prétendre que ce soit plus rapide, tu n'auras pas le problème de 
"trop d'arguments" en faisant:


    find /tmp -cmin +30 -type f -exec rm -f {} \;

Tu peux rajouter -print pour le voir avancer.

J'ai rajouté -type f puisque tu ne parles que de fichiers.



Je me demande en le lisant pourquoi je n'y ai même pas pensé

Par contre lancer 56 millions de fois la copmmande rm, ca risque de 
prendre un temps de dingue, mais avec -print on a au moins l'impression 
que "ca avance" lol



Cordialement, Jean-Damien.




Merci

Alain JUPIN
Lumières d'Ici ... et d'Ailleurs 


Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet l0f4r0
4 avr. 2021, 10:02 de l0f...@tuta.io:

> Tu peux limiter le nb de ses arguments par commande lancée en utilisant 
> l'option `-n`.
>
> Tant que t'y es, pour garder un œil sur les commandes générées, t'as qu'à 
> aussi utiliser l'option `-t`.
>
Précision : je parle des options de `xargs`

l0f4r0



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet l0f4r0
Bonjour,

Désolé, je n'ai pas mieux que `find/rsync` pour réaliser ta tâche massive de 
suppression.

Quelques remarques ci-dessous cependant :

4 avr. 2021, 09:30 de aju...@jupin.net:

> par contre, le répertoire/var/lib/php/sessions/ contient 56 781 542 
> fichiers
>  J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
>  Mais après plusieurs heures la commande échoue avec "tropd'arguments"
>
Oui, pas étonnant, le `rm` se retrouve avec bien trop d'arguments de la sorte.

Tu peux limiter le nb de ses arguments par commande lancée en utilisant 
l'option `-n`.

Tant que t'y es, pour garder un œil sur les commandes générées, t'as qu'à aussi 
utiliser l'option `-t`.

Je ferais aussi gaffe à certains caractères ('\n'...) dans les noms de fichiers 
qui peuvent faire foirer le `rm`.
Donc j'utiliserais également `find -print0 | xargs -0`.
Par ailleurs, certains commentaires sur internet semblent indiquer que passer 
par `find -delete` serait plus rapide que `find | xargs rm`.
Tu peux peut-être essayer ?

>   Bref ce matin, il y a deux heures, je tente une nouvelle approche :
> rsync -a --delete /tmp/empty/ /var/lib/php/sessions/
>  avec bien sur /tmp/empty qui est vide
>  Mais après deux heures de fonctionnement, je n'ai aucun retour de la
> commande !
>
Ingénieux.
Pour l'histoire du retour manquant, t'as qu'à ajouter l'option `-v`.

l0f4r0



Re: Effacer plusieurs millions de fichiers d'un répertoire !

2021-04-04 Par sujet Jean-Damien Durand

Bonjour Alain,


Sans prétendre que ce soit plus rapide, tu n'auras pas le problème de 
"trop d'arguments" en faisant:


    find /tmp -cmin +30 -type f -exec rm -f {} \;

Tu peux rajouter -print pour le voir avancer.

J'ai rajouté -type f puisque tu ne parles que de fichiers.


Cordialement, Jean-Damien.


On 4/4/21 9:30 AM, JUPIN Alain wrote:

Bonjour

Petit casse tête du dimanche matin !

Sur un serveur LAMP à base de Debian10 (à jour en version 10.9), j'ai 
noté des lenteurs et le syslog est sans équivoque :
[4958833.739887] EXT4-fs warning (device sda3): 
ext4_dx_add_entry:2258: Directory (ino: 18612230) index full, reach 
max htree level :2
[4958833.739889] EXT4-fs warning (device sda3): 
ext4_dx_add_entry:2262: Large directory feature is not enabled on this 
filesystem


Après analyse, je ne dépasse pas le nombre max d'inodes du système de 
fichier (j'en suis à 9% d'utilisé), par contre, le répertoire 
/var/lib/php/sessions/ contient 56 781 542 fichiers

J'ai lancé hier soir un : find . -cmin +30 | xargs rm;
Mais après plusieurs heures la commande échoue avec "trop d'arguments"

Bref ce matin, il y a deux heures, je tente une nouvelle approche : 
rsync -a --delete /tmp/empty/ /var/lib/php/sessions/

avec bien sur /tmp/empty qui est vide
Mais après deux heures de fonctionnement, je n'ai aucun retour de la 
commande !


Du coup connaissez vous une méthode "rapide" pour effacer plusieurs 
millions de fichiers d'un répertoire !


PS : Par contre, je ne comprend pas la présence de ses fichiers, car 
j'ai bien un cron qui se lance toutes les demi-heures pour supprimer 
les sessions. Va falloir que j'élucide ce mystère !



--
Alain JUPIN
Lumières d'Ici ... et d'Ailleurs