Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/04/2010, à 01:54

Kelek

Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Si pour une raison ou pour une autre vous n'avez plus accès à votre boot Windows et que vous  ne souhaitez pas le réinstaller mais que vous avez toujours des partitions NTFS, il est probable que vous ayez à défragmenter celles-ci.

De même un pti coup de ménage sur les partitions FAT32 ne fait jamais de mal.

***********1e SOLUTION*************(merci à tshirtman ! )
En ligne, la version 0.08 du script de Con Konivas ( http://en.wikipedia.org/wiki/Con_Kolivas ) :

#!/bin/bash
# defrag v0.08 by Con Kolivas <kernel@kolivas.org
# Braindead fs-agnostic defrag to rewrite files in order largest to smallest
# Run this in the directory you want all the files and subdirectories to be
# reordered. It will only affect one partition. It works best when run twice.
# Are you really crazy enough to be using this? It might blow your data
# into tiny little useless chunks.


trap 'abort' 1 2 15

renice 19 $$ > /dev/null

abort()
{
	echo -e "\nAborting"
	rm -f tmpfile dirlist
	exit 1
}

fail()
{
	echo -e "\nFailed"
	abort
}

declare -i filesize=0
declare -i numfiles=0

#The maximum size of a file we can easily cache in ram
declare -i maxsize=$((`awk '/MemTotal/ {print $2}' /proc/meminfo`*1024))
(( maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` ))
(( maxsize/= 2))

if [[ -a tmpfile || -a dirlist  ]] ; then
	echo dirlist or tmpfile exists
	exit 1
fi

# Sort in the following order:
# 1) Depth of directory
# 2) Size of directory descending
# 3) Filesize descending
# I made this crap up. It's completely unvalidated.

echo "Creating list of files..."

#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" | sort -n | uniq > dirlist

#sort directories in descending size order
cat dirlist | while read d;
do
	find -xdev -type d -mindepth $d -maxdepth $d -printf "\"%p\"\n" | \
		xargs du -bS --max-depth=0 | \
		sort -k 1,1nr -k 2 |\
		cut -f2 >> tmpfile
	if (( $? )) ; then
		fail
	fi

done

rm -f dirlist

#sort files in descending size order
cat tmpfile | while read d;
do
	find "$d" -xdev -type f -maxdepth 1 -printf "%s\t%p\n" | \
		sort -k 1,1nr | \
		cut -f2 >> dirlist
	if (( $? )) ; then
		fail
	fi
done

rm -f tmpfile

numfiles=`wc -l dirlist | awk '{print $1}'`

echo -e "$numfiles files will be reordered\n"

#copy to temp file, check the file hasn't changed and then overwrite original
cat dirlist | while read i;
do
	(( --numfiles ))
	if [[ ! -f $i ]]; then
		continue
	fi

	#We could be this paranoid but it would slow it down 1000 times
	#if [[ `lsof -f -- "$i"` ]]; then
	#	echo -e "\n File $i open! Skipping"
	#	continue
	#fi

	filesize=`find "$i" -printf "%s"`
	# read the file first to cache it in ram if possible
	if (( filesize < maxsize ))
	then
		echo -e "\r $numfiles files left                                                            \c"
		cat "$i" > /dev/null
	else
		echo -e "\r $numfiles files left - Reordering large file sized $filesize ...                \c"
	fi

	datestamp=`find "$i" -printf "%s"`
	cp -a -f "$i" tmpfile
	if (( $? )) ; then
		fail
	fi
	# check the file hasn't been altered since we copied it
	if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then
		continue
	fi

	mv -f tmpfile "$i"
	if (( $? )) ; then
		fail
	fi
done

echo -e "\nSucceeded"

rm -f dirlist

source : http://ck.kolivas.org/apps/defrag/defrag

Après test sur une partition de 50 Go en NTFS
(données lue avec WinContig depuis un LiveCD XP, puisque je n'arrive pas à trouver quelque chose qui me montre la fragmentation de tout un disque sous Linux, filefrag n'étant à ma connaissance applicable qu'à des fichiers ou au contenu d'un répertoire, de manière non récursive)
pleine à 82% fragmentée à 27%
19580 fragments dans 627 fichiers
dont le plus fragmenté est divisé en 843 parties,

oui, le script de Con Kolivas fonctionne pour le NTFS, et pour moi, a très bien fonctionné. Après cette défragmentation (qui a duré pas loin de 5 heures) et réanalyse avec WinContig, la fragmentation du disque n'était pas égale à 0 mais à 1,2 %, 3 fichiers fragmentés en 17 parties.

Cependant, pour des raisons de taille de fichiers et d'espace libre, ce script peut ne pas convenir à la défragmentation de clés USB, notamment celles créées avec Multiboot :

frafa, développeur de Multiboot, a écrit :

Bonjour,
je viens de regarder le script pour defragmenter de "Con Kolivas",
il n'est pas adapté dans notre cas particulier,
car il faut avoir de libre un espace supérieur a la taille du plus gros fichier
et dans notre cas genre une iso de 2.5Gio
+ pleins d'autres petites isos sur une clé USB de genre 4Gio
ben c'est peine perdue ce script ne peux pas fonctioner...

donc je vais réfléchier a une autre méthode pour défragmenter,
genre utiliser dd comme dans le mode sauvagarde pour créer une copie de notre clé USB
(il faudra bien sur disposer de suffisament d'espace sur partoch de /tmp)
puis monter cette copie en lecture et efacer en totalité la clé USB
avant de reripper les fichiers sur la clé usb genre par ordre de grandeur
et pour finir remettre grub dans le mbr...

Donc, attention à la taille de votre espace libre !

***********2e SOLUTION*************

Cette solution implique que vous utilisiez un OS Windows modifié et allégé, en LiveCD.

Elle débute par le téléchargement d'une ISO à graver : Le Hiren's Boot CD > http://www.hirensbootcd.net/cd-contents/128-hbcd-102.html qui contient un maximum d'outils pour les partitions NTFS, dont des défragmenteurs - et des antivirus, antispywares, etc.[/b] Ce CD est donc aussi pratique pour les personnes amenées à faire de la maintenance en extérieur.

Il suffit de :
>> booter sur le CD
>> de lancer la session mini-Windows
>> ouvrir le menu "Hiren"
>> puis le dossier HBCD/Wintools
>> et enfin de cliquer sur l'appli désirée qui sera le plus souvent disponible en cliquant sur le fichier *.bat qui la lancera dans une fenêtre de commande avant de passer à sa version en interface graphique.

Pour la défragmentation, je vous conseille JKDefrag, plus efficient que le classique défragmenteur de Windows.
Quelques temps plus tard, les partitions NTFS sont défragmentées, et par exemple prêtes à être vidées de leur précieux contenu sans dégât avant d'être formatées en ext3 smile

**********************
Cette solution fait suite à cette discussion : http://forum.ubuntu-fr.org/viewtopic.php?pid=3381037

Dernière modification par Kelek (Le 09/06/2010, à 13:03)


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne

#2 Le 06/04/2010, à 02:11

Pacifick_FR42

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Ton lien ne menne nulle part, impossible de trouver le moyen de télécharger l'iso....

Hors ligne

#3 Le 06/04/2010, à 03:33

Kelek

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Pacifick_FR42 a écrit :

Ton lien ne menne nulle part, impossible de trouver le moyen de télécharger l'iso....

Je ne vois pas l'intérêt d'un lien de DL direct, ni pour le téléchargeur, ni pour l'auteur du site, un peu comme si je téléchargeais directement ton 'Night & fog' sans pouvoir regarder tes autres créations ni visiter le superbe site de Rico, bituur et mr_ersatz smile

Mon lien mène directement sur la liste des logiciels intégrés à l'ISO, version 10.2, qui me semble intéressante à étudier un peu.
Tu peux télécharger sans peine l'ISO dans la rubrique "downloads" située dans le menu à gauche.
Si tu préfères, voici le lien de l'accueil du site : http://www.hirensbootcd.net/

Dernière modification par Kelek (Le 06/04/2010, à 03:38)


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne

#4 Le 06/04/2010, à 03:51

Pacifick_FR42

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

oui, mais dans la section "download" je n'ai pas trouvé de lien me permettant de télécharger, d'ou mon poste
...et merci pour le commentaire wink, ce morceau à été enregistré en directe, en une seule passe, et comme je suis pas pianiste... parfois, ça tombe pas super juste smile

Hors ligne

#5 Le 06/04/2010, à 09:07

tshirtman

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

la défragmentation sous linux tiens en un script de cinq lignes (de tête, ne faites pas ça chez vous ça ne sert à rien)

defrag (){
cp $1 /tmp/temp_defrag_file
mv /tmp/defrag_file $1
}

find / -type f -exec defrag {} \;

Dernière modification par tshirtman (Le 06/04/2010, à 09:10)

Hors ligne

#6 Le 06/04/2010, à 09:14

Kelek

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Pacifick_FR42 a écrit :

oui, mais dans la section "download" je n'ai pas trouvé de lien me permettant de télécharger, d'ou mon poste
...et merci pour le commentaire wink, ce morceau à été enregistré en directe, en une seule passe, et comme je suis pas pianiste... parfois, ça tombe pas super juste smile

Il y a les liens suivants, disponibles pour toutes les versions  :

Direct HTTP Mirror | Rapidshare | Megaupload | Netload | 2shared | Torrent | Torrent Magnet

Mais comme la 10.3 est sortie hier ( je ne la voyais pas en ligne ce matin à 04h00, elle y est maintenant ) il est possible que tu sois tombé au mauvais moment.

tshirtman a écrit :

la défragmentation sous linux tiens en un script de cinq lignes (de tête, ne faites pas ça chez vous ça ne sert à rien)

defrag (){
cp $1 /tmp/temp_defrag_file
mv /tmp/defrag_file $1
}

find / -type f -exec defrag {} \;

Ah oui, vraiment ? lol tu es certain de ne pas te tromper de sujet ?
Je crois qu'il y pas mal de personnes que ça va intéresser, ton histoire, quand tu nous auras donné le script exact...
ou est-ce encore un troll du genre : "Windows-pabô, Linux-trobô" dont on n'a strictement rien à faire ?

Dernière modification par Kelek (Le 06/04/2010, à 09:26)


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne

#7 Le 06/04/2010, à 09:46

tshirtman

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

je ne suis pas sur de la légalité du partage de "mini windows xp" et "mini windows 98" en fait, donc autant utiliser des outils libres smile.

Pour ce que j'en sais le driver ntfs-3g ne fragmente pas comme le driver ntfs de windows, donc un tel script est tout à fait valide…

le script d'origine (écrit par un mec qui contribue sérieusement au kernel et maintient son set de patch) était là http://ck.kolivas.org/apps/defrag/ mais ça ne semble plus répondre.

Hors ligne

#8 Le 06/04/2010, à 11:20

Kelek

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Je pense que tu as raison de douter de la parfaite légalité de Hiren's BootCD, vu le minixp.
Ton script m'intéresse beaucoup (je suis entretemps allé faire un tour sur ton blog, tu ne ressembles pas à un troll wink )  mais le site que tu proposes semble inaccessible. Cependant, voilà ce que j'ai trouvé dans le répertoire ~/apps/defrag/defrag-0.07/defrag de kolivas, conservé dans le cache Google :

#!/bin/sh
# defrag v0.06 by Con Kolivas <kernel@kolivas.org
# Braindead fs-agnostic defrag to rewrite files in order largest to smallest
# Run this in the directory you want all the files and subdirectories to be
# reordered. It will only affect one partition.

trap 'abort' 1 2 15

renice 19 $$ > /dev/null

abort()
{
	echo -e "\nAborting"
	rm -f tmpfile dirlist
	exit 1
}

fail()
{
	echo -e "\nFailed"
	abort
}

declare -i filesize=0
declare -i numfiles=0

#The maximum size of a file we can easily cache in ram
declare -i maxsize=`awk '/MemTotal/ {print $2}' /proc/meminfo`
(( maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` ))
(( maxsize/= 2))

if [[ -a tmpfile || -a dirlist  ]] ; then
	echo dirlist or tmpfile exists
	exit 1
fi

# Sort in the following order:
# 1) Depth of directory
# 2) Size of directory descending
# 3) Filesize descending

echo "Creating list of files..."

#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" | sort -n | uniq > dirlist

#sort directories in descending size order
cat dirlist | while read d;
do
	find -xdev -type d -mindepth $d -maxdepth $d -printf "\"%p\"\n" | \
		xargs du -bS --max-depth=0 | \
		sort -k 1,1nr -k 2 |\
		cut -f2 >> tmpfile
	if (( $? )) ; then
		fail
	fi

done

rm -f dirlist

#sort files in descending size order
cat tmpfile | while read d;
do
	find "$d" -xdev -type f -maxdepth 1 -printf "%s\t%p\n" | \
		sort -k 1,1nr | \
		cut -f2 >> dirlist
	if (( $? )) ; then
		fail
	fi
done

rm -f tmpfile

numfiles=`wc -l dirlist | awk '{print $1}'`

echo -e "$numfiles files will be reordered\n"

#copy to temp file, check the file hasn't changed and then overwrite original
cat dirlist | while read i;
do
	(( --numfiles ))
	if [[ ! -f $i ]]; then
		continue
	fi

	#We could be this paranoid but it would slow it down 1000 times
	#if [[ `lsof -f -- "$i"` ]]; then
	#	echo -e "\n File $i open! Skipping"
	#	continue
	#fi

	filesize=`find "$i" -printf "%s"`
	# read the file first to cache it in ram if possible
	if (( filesize < maxsize ))
	then
		echo -e "\r $numfiles files left                                                            \c"
		cat "$i" > /dev/null
	else
		echo -e "\r $numfiles files left - Reordering large file sized $filesize ...                \c"
	fi

	datestamp=`find "$i" -printf "%s"`
	cp -a -f "$i" tmpfile
	if (( $? )) ; then
		fail
	fi
	# check the file hasn't been altered since we copied it
	if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then
		continue
	fi

	mv -f tmpfile "$i"
	if (( $? )) ; then
		fail
	fi
done

echo -e "\nSucceeded"

rm -f dirlist

avec ce README dans son ~/apps/defrag/

This script works best run from the top directory of each partition.

It is braindead simple and filesystem agnostic. You need to run it on a
mounted partition. It seems safe in my testing but comes with all the usual
warnings and more!

The maximum benefit seems to occur with two runs, and it seems to be
effective only if the initial fragmentation is > 2.5%.

Note if you use lilo as your loader and you defrag the partition containing
your kernel you will need to rerun lilo before rebooting!

Here is a sample of a /home partition containing 407564 files.

Before and after running this script:

Before:
filesystem: ext3
 mount status: mount
 fragmented percentage: 3.16%
 total blocks: 17194960
 system blocks: 269928
 file blocks: 9939228
 fragmented blocks: 314289
 sys-fragmented blocks: 44
 continuous files: 411125
 fragmented files: 43333
 max dir depth: 15

After:
filesystem: ext3
 mount status: mount
 fragmented percentage: 1.59%
 total blocks: 17194960
 system blocks: 269928
 file blocks: 9885890
 fragmented blocks: 157391
 sys-fragmented blocks: 56
 continuous files: 417985
 fragmented files: 29727
 max dir depth: 15


Best results I've had were on my compile directory:
Before:
filesystem: ext3
 mount status: mount
 fragmented percentage: 8.93%
 total blocks: 11698552
 file blocks: 290134
 fragmented blocks: 25918
 sys-fragmented blocks: 4
 continuous files: 83754
 fragmented files: 8155
 max dir depth: 15

After:
filesystem: ext3
 mount status: mount
 fragmented percentage: 0.21%
 total blocks: 9267264
 file blocks: 290134
 fragmented blocks: 618
 sys-fragmented blocks: 4
 continuous files: 91623
 fragmented files: 286
 max dir depth: 15


Get tools to measure fragmentation of ext2/3 here:
http://sourceforge.net/projects/davtools/

Con

Il semble que cette version date de juin 2009 - ça correspond à ce que tu nous proposais ? apparemment, kolivas n'a testé son script que sur des partitions en ext3.

********EDIT***********
Apparemment, son site est de nouveau en ligne, au moins l'arborescence brute. >> http://ck.kolivas.org/
On y trouve entre autres une très intéressante interview donnée au Linux Magazine allemand dans laquelle il partage ses doutes quant à son avenir de linuxien et les raisons de son départ de l'équipe de codage du noyau Linux en 2007. À ce sujet, voir aussi :
http://apcmag.com/why_i_quit_kernel_developer_con_kolivas.htm
Son nouveau site : http://users.on.net/~ckolivas/index.html

Dernière modification par Kelek (Le 06/04/2010, à 11:49)


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne

#9 Le 06/04/2010, à 12:29

tshirtman

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

bon, son script est bien plus élaboré que le mien wink mais c'est la même idée oui, le sien est bien sur bien plus sur à utiliser que le mien.

It is braindead simple and filesystem agnostic

Il semble assez confiant sur le fait que ça marche sur les autres FS, et avec une recherche rapide tout à l'heure, j'ai appris que le driver ntfs-3g n'était pas sensé fragmenter (dans un bug launchpad affirmant qu'il fragmentait dans un cas précis) (https://bugs.launchpad.net/ubuntu/+source/ntfs-3g/+bug/243287), donc je pense sérieusement que ça marche smile, et en tout cas, ça ne peut pas faire de mal.

Sinon la page wikipedia de l'auteur indique qu'il a recommencé à s'investir dans linux, avec le maintien de son set de patch qui a repris.

(ps: merci de me dédouaner de l'accusation de troll, j'apprécie ^^)

edit: mouarf, on trouve des perles sur son site ^^ http://ck.kolivas.org/crap/negima_linux_joke.png

Dernière modification par tshirtman (Le 06/04/2010, à 12:33)

Hors ligne

#10 Le 08/04/2010, à 09:55

Kelek

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

En ligne, la version 0.08 du script de Con Konivas :

#!/bin/bash
# defrag v0.08 by Con Kolivas <kernel@kolivas.org
# Braindead fs-agnostic defrag to rewrite files in order largest to smallest
# Run this in the directory you want all the files and subdirectories to be
# reordered. It will only affect one partition. It works best when run twice.
# Are you really crazy enough to be using this? It might blow your data
# into tiny little useless chunks.


trap 'abort' 1 2 15

renice 19 $$ > /dev/null

abort()
{
	echo -e "\nAborting"
	rm -f tmpfile dirlist
	exit 1
}

fail()
{
	echo -e "\nFailed"
	abort
}

declare -i filesize=0
declare -i numfiles=0

#The maximum size of a file we can easily cache in ram
declare -i maxsize=$((`awk '/MemTotal/ {print $2}' /proc/meminfo`*1024))
(( maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` ))
(( maxsize/= 2))

if [[ -a tmpfile || -a dirlist  ]] ; then
	echo dirlist or tmpfile exists
	exit 1
fi

# Sort in the following order:
# 1) Depth of directory
# 2) Size of directory descending
# 3) Filesize descending
# I made this crap up. It's completely unvalidated.

echo "Creating list of files..."

#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" | sort -n | uniq > dirlist

#sort directories in descending size order
cat dirlist | while read d;
do
	find -xdev -type d -mindepth $d -maxdepth $d -printf "\"%p\"\n" | \
		xargs du -bS --max-depth=0 | \
		sort -k 1,1nr -k 2 |\
		cut -f2 >> tmpfile
	if (( $? )) ; then
		fail
	fi

done

rm -f dirlist

#sort files in descending size order
cat tmpfile | while read d;
do
	find "$d" -xdev -type f -maxdepth 1 -printf "%s\t%p\n" | \
		sort -k 1,1nr | \
		cut -f2 >> dirlist
	if (( $? )) ; then
		fail
	fi
done

rm -f tmpfile

numfiles=`wc -l dirlist | awk '{print $1}'`

echo -e "$numfiles files will be reordered\n"

#copy to temp file, check the file hasn't changed and then overwrite original
cat dirlist | while read i;
do
	(( --numfiles ))
	if [[ ! -f $i ]]; then
		continue
	fi

	#We could be this paranoid but it would slow it down 1000 times
	#if [[ `lsof -f -- "$i"` ]]; then
	#	echo -e "\n File $i open! Skipping"
	#	continue
	#fi

	filesize=`find "$i" -printf "%s"`
	# read the file first to cache it in ram if possible
	if (( filesize < maxsize ))
	then
		echo -e "\r $numfiles files left                                                            \c"
		cat "$i" > /dev/null
	else
		echo -e "\r $numfiles files left - Reordering large file sized $filesize ...                \c"
	fi

	datestamp=`find "$i" -printf "%s"`
	cp -a -f "$i" tmpfile
	if (( $? )) ; then
		fail
	fi
	# check the file hasn't been altered since we copied it
	if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then
		continue
	fi

	mv -f tmpfile "$i"
	if (( $? )) ; then
		fail
	fi
done

echo -e "\nSucceeded"

rm -f dirlist

source : http://ck.kolivas.org/apps/defrag/defrag

Après test sur une partition de 50 Go en NTFS
(données lue avec WinContig depuis un LiveCD XP, puisque je n'arrive pas à trouver quelque chose qui me montre la fragmentation de tout un disque sous Linux, filefrag n'étant à ma connaissance applicable qu'à des fichiers ou au contenu d'un répertoire, de manière non récursive)
pleine à 82% fragmentée à 27%
19580 fragments dans 627 fichiers
dont le plus fragmenté est divisé en 843 parties,

oui, le script de Con Kolivas fonctionne pour le NTFS, et pour moi, a très bien fonctionné. Après cette défragmentation (qui a duré pas loin de 5 heures) et réanalyse avec WinContig, la fragmentation du disque n'était pas égale à 0 mais à 1,2 %, 3 fichiers fragmentés en 17 parties.


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne

#11 Le 07/06/2010, à 13:06

Kelek

Re : Défragmenter les partitions NTFS et FAT32 sans Windows (ou presque)

Cette solution peut aussi être pratique pour défragmenter les partitions FAT32 d'une clé USB, par exemple celles d'une clé configurée avec Multiboot.
Mais attention : il faut avoir libre un espace libre supérieur à la taille du plus gros fichier présent sur la clé.

Dernière modification par Kelek (Le 09/06/2010, à 13:04)


Config PC - OS : Xubuntu 10.04 x86-64

Hors ligne