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 écritBonjour,
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 🙂
**********************
Cette solution fait suite à cette discussion : http://forum.ubuntu-fr.org/viewtopic.php?pid=3381037