Table des matières

Partition, montage

Déplacer son /home sur une autre partition à chaud

Situation: on a un seul montage sur / et on commence à être limite en place, on veut donc déplacer tout le /home sur une autre partition afin de gagner de la place sur la partition actuel. (Note: vous pouvez faire de même avec /usr, /var, /opt, /lib)

Nous allons faire tout ça à chaud, c’est à dire sans liveCD ou liveUSB mais directement dans notre système d’exploitation.

Avec gparted, créez votre partition et formatez la.

Montez votre nouvelle partition

mkdir /mnt/home
mount /dev/sda6 /mnt/home

Copiez vos données

cp -ar /home/. /mnt/home/

Récupérez l’uuid de votre partition

ls -l /dev/disk/by-uuid/ | grep sda6

ou

blkid

Modifiez le /etc/fstab et ajoutez votre nouveau point de montage

#/home on /dev/sda6
UUID=79f83f9f-9851-40ee-9b8e-aac91072a868 /home           ext4    errors=remount-ro 0       1

Démontez votre partition

umount /mnt/home
rmdir /mnt/home

Remontez votre partition à partir des infos du /etc/fstab

mount -a

Vérifiez que votre montage est effectif

mount | grep sda6

Vous devriez voir

/dev/sda6 on /home type ext4 (rw,errors=remount-ro)

Une fois votre partition montée sur le /home, il faut supprimer l’ancien contenu du /home

mkdir /mnt/root
mount --bind / /mnt/root
rm -fr /mnt/root/home
umount /mnt/root
rmdir /mnt/root

Si comme moi vous avez virer la partition windows pour en faire une partition de home et que cette partition servait comme amorçage du système, n’oubliez pas d’ajouter un drapeau de boot avec gparted et dans le doute, réinstaller grub

Pour vérifier si vous avez une partition bootable, repérez l’astérisque (*)

# fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 têtes, 63 secteurs/piste, 19457 cylindres, total 312581808 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0xdbc6dbc6

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1            2048     8390655     4194304   82  partition d'échange Linux / Solaris
/dev/sda2       286713854   312576704    12931425+   5  Étendue
/dev/sda3         8390656    50139135    20874240   83  Linux
/dev/sda4        50139136   286711807   118286336   83  Linux
/dev/sda5       311580675   312576704      498015   82  partition d'échange Linux / Solaris
/dev/sda6   *   286713856   311580671    12433408   83  Linux

Les entrées de la table de partitions ne sont pas dans l'ordre du disque

Pour vérifier si grub est installé

# debconf-show grub-pc
  grub-pc/kopt_extracted: false
  grub2/kfreebsd_cmdline:
  grub2/device_map_regenerated:
* grub-pc/install_devices: /dev/disk/by-id/ata-MAXTOR_STM3160215AS_5RA38E18
  grub-pc/postrm_purge_boot_grub: false
  grub-pc/install_devices_failed_upgrade: true
  grub-pc/disk_description:
  grub2/linux_cmdline:
  grub-pc/install_devices_empty: false
  grub2/kfreebsd_cmdline_default: quiet splash
  grub-pc/partition_description:
  grub-pc/install_devices_failed: false
  grub-pc/install_devices_disks_changed:
  grub2/linux_cmdline_default: quiet splash
  grub-pc/chainload_from_menu.lst: true
  grub-pc/hidden_timeout: true
  grub-pc/mixed_legacy_and_grub2: true
  grub-pc/timeout: 10

Pour savoir quel disque est concerné

# l /dev/disk/by-id/ata-MAXTOR_STM3160215AS_5RA38E18
lrwxrwxrwx 1 root root 9 mai    6 15:42 /dev/disk/by-id/ata-MAXTOR_STM3160215AS_5RA38E18 -> ../../sda

Pour reconfigurer et réinstaller grub

# update-grub
Création de grub.cfg…
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.8.0-19-generic
Found initrd image: /boot/initrd.img-3.8.0-19-generic
Found memtest86+ image: /boot/memtest86+.bin
  No volume groups found
fait
# grub-install /dev/sda
/usr/sbin/grub-bios-setup : attention : Le secteur 32 est déjà utilisé par le programme « FlexNet » ; à éviter. Ce logiciel risque de poser des problèmes d'amorçage ou autre à l'avenir. Veuillez demander à ses auteurs de ne pas sauver de données dans la piste d'amorçage.
Installation terminée, sans erreur.

Aucune idée du message d’erreur “flexnet”

Par curiosité, vous pouvez consulter le secteur de boot

# od -tx1z -Ax -N 512 /dev/sda
000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c  >.c....|.P.P....|<
000010 bf 1b 06 50 57 b9 e5 01 f3 a4 cb bd be 07 b1 04  >...PW...........<
000020 38 6e 00 7c 09 75 13 83 c5 10 e2 f4 cd 18 8b f5  >8n.|.u..........<
000030 83 c6 10 49 74 19 38 2c 74 f6 a0 b5 07 b4 03 02  >...It.8,t.......<
000040 ff 00 00 20 01 00 00 00 00 02 fa 90 90 f6 c2 80  >... ............<
000050 75 02 b2 80 ea 59 7c 00 00 31 00 80 01 00 00 00  >u....Y|..1......<
000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70  >...........t...p<
000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc  >t....y|..1......<
000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 bb 17 04  >. ..d|<.t...R...<
000090 80 27 03 74 06 be 88 7d e8 17 01 be 05 7c b4 41  >.'.t...}.....|.A<
0000a0 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 37 83  >..U..ZRr=..U.u7.<
0000b0 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 44 02  >..t21..D.@.D..D.<
0000c0 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 8b 1e  >....f..\|f.\.f..<
0000d0 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd 13 72  >`|f.\..D..p.B..r<
0000e0 05 bb 00 70 eb 76 b4 08 cd 13 73 0d f6 c2 80 0f  >...p.v....s.....<
0000f0 84 d0 00 be 93 7d e9 82 00 66 0f b6 c6 88 64 ff  >.....}...f....d.<
000100 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 f4 40  >@f.D...........@<
000110 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 60 7c  >.D.......f..f.`|<
000120 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 34 88  >f..uNf.\|f1.f.4.<
000130 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 88 c5  >.1.f.t.;D.}7....<
000140 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 70 8e  >0........Z....p.<
000150 c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e b9 00  >.1......r...`...<
000160 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f 61 ff  >...1..........a.<
000170 26 5a 7c be 8e 7d eb 03 be 9d 7d e8 34 00 be a2  >&Z|..}....}.4...<
000180 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 47 65  >}.......GRUB .Ge<
000190 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 65 61  >om.Hard Disk.Rea<
0001a0 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 b4 0e  >d. Error........<
0001b0 cd 10 ac 3c 00 75 f4 c3 c6 db c6 db 00 00 00 20  >...<.u......... <
0001c0 21 00 82 4b 81 0a 00 08 00 00 00 00 80 00 00 fe  >!..K............<
0001d0 ff ff 05 fe ff ff fe e7 16 11 c3 a2 8a 01 00 4b  >...............K<
0001e0 82 0a 83 fe ff ff 00 08 80 00 00 08 7d 02 00 fe  >............}...<
0001f0 ff ff 83 fe ff ff 00 10 fd 02 00 d0 19 0e 55 aa  >..............U.<
000200

Démonter

Il y a plusieurs raisons pour qu’un système de fichier ne puisse pas se démonter. (inspiré de http://oletange.blogspot.fr/2012/04/umount-device-is-busy-why.html)

Un répertoire ou un fichier ouvert par un process

Trouver le process qui lit ou écrit dans un fichier et le tuer

# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
# lsof /mnt/test/
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    15819 tange  cwd    DIR   8,81    16384 6931 /mnt/test/testdir
cat     24932 root    1w   REG   8,81        0 6944 /mnt/test/testdir/a
# kill -9 15819 24932
# lsof /mnt/test/
# umount /mnt/test

Le répertoire est partagé par un serveur nfs et un client nfs est en train de le parcourir

# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
# showmount -e
Export list for alpha:
/mnt/test 192.168.1.203
# /etc/init.d/nfs-kernel-server stop
# umount /mnt/test

Si la commande showmount ne fonctionne pas, vous pouvez utiliser netstat

netstat -apl | grep nfs

Un loopback est présent dans le répertoire

# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
# losetup -a
/dev/loop0: [0851]:6983 (/mnt/test/testdir/disk.img)
/dev/loop1: [0851]:6986 (/mnt/test/testdir/disk2.img)
# umount /mnt/test/testdir/disk.img
# umount /mnt/test/testdir/disk2.img
umount: /mnt/test/testdir/disk2.img: not mounted
# losetup -d /dev/loop1
# umount /mnt/test

Un fichier de swap est présent dans le répertoire

# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/mnt/test/testdir/swapfile              file            95480   0       -2
# swapoff /mnt/test/testdir/swapfile
# umount /mnt/test

Le device est mort...

On peut utiliser le mode paresseux (lazy) de umount

# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1)) 
# dmesg
:
[75620.618404] lost page write due to I/O error on md0
[75620.618408] Buffer I/O error on device md0, logical block 16804
:
[75890.015507] INFO: task cp:27736 blocked for more than 120 seconds.
[75890.015513] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[75890.015516] cp              D ffff88053fdd39c0     0 27736  27734 0x00000004
## Here I have not found a solution, so:
# umount -l /mnt/test

Le répertoire contient un système de fichier encrypté démonté

normaluser$ encfs /mnt/test/dir.enc /mnt/test/dir
EncFS Password:
# umount /mnt/test/dir
# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
## Here I have not found a solution, so:
# umount -l /mnt/test

Créer une partition dans un fichier

Par exemple vous n’avez plus de place dans votre /home, mais vous avez un disque en NTFS avec plein de place. Plutôt que de le partitionner, on peut créer un fichier qui contiendra un filesystem linux et monter /home sur ce fichier.

Créons un fichier de 20Go

dd if=/dev/zero of=linux-home.ext4 bs=1024 count=20000000

Formatons le en ext4

mke2fs -t ext4 linux-home.ext4 
mke2fs 1.42.9 (4-Feb-2014)
linux-home.ext4 n'est pas un périphérique spécial en mode bloc.
Procéder malgré tout ? (o,n) o
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
864960 i-noeuds, 3456475 blocs
172823 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=3539992576
106 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8160 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocation des tables de groupe : complété                        
Écriture des tables d'i-noeuds : complété                        
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Montez ce fichier sur un répertoire

mount -o loop linux-home.ext4 /mnt/temp

Copiez votre /home dedans

rsync -avP /home /mnt/temp

Supprimez le contenu de /home (ou pas si vous voulez garder une copie)

Monter ce fichier sur votre /home

umount /mnt/temp
mount -o loop linux-home.ext4 /home

Mettre à jour le /etc/fstab, pour cela, copier/coller les lignes du /etc/mtab qui vous intéressent dans le /etc/fstab. Utilisez la commande suivante pour vérifier que votre /etc/fstab ne contient pas d’erreur

mount -fav