Disque virtuel

Bonjour à tous,

Je souhaiterai créer des disques virtuels que je pourrais monter dans différents repertoires pour cloisonner des espaces web. Pour ce faire, je peux bien évidemment utiliser la commande dd pour créer un fichier de la taille souhaité puis créer un système de fichier dans ce fichier puis le monter avec la commande mount.

Avec cette méthode, si je veux créer un disque virtuel de 10 Go, mon fichier fera aussi 10 Go. Je cherche donc une solution pour créer un fichier représentant un disque virtuel mais qui ferai la taille consommé et non la taille total, un peu comme les fichiers vdi de virtualbox.

Auriez vous des pistes de recherche car je n’arrive pas vraiment à trouver de solution.

Bien à vous

Merci pour votre réponse, je vais regarder ces outils.

Par contre pour spécifier ma requête, j’ai un dossier client (ex /var/www/client)
Dans ce dossier, je souhaite créer un répertoire par client et monter un disque virtuel par client sur ce repertoire. Ce volume virtuel sera un fichier stocké ailleurs mais ne devra pas excéder l’espace total souscrit par le client. Exemple, le client “abc” souscrit à une offre de 10Go, le disque virtuel représenté par le fichier “abc” monté dans le repertoire /var/www/client/abc ne devra pas excéder 10Go mais devra faire environ la taille utilisé par le client. (s’il consomme 1 Go, le fichier devra faire environ 1 Go)

Est ce que votre outil est capable de gérer ce scenario et est ce qu’il me permettra de monter n disques virtuels ?

Cordialement

Problème intéressant, Tu as une méthode:

  1. Tu crée un fichier vide:

francois@portos:/tmp$ touch DSK francois@portos:/tmp$ ls -l DSK -rw-r--r-- 1 francois francois 0 sept. 23 14:12 DSK francois@portos:/tmp$ du -sh DSK 0 DSK francois@portos:/tmp$

  1. Tu formattes en disant que tu veux 200000 blocs (soit 100M) par exemple:

[code]francois@portos:/tmp$ mkfs.ext2 DSK 200000
mke2fs 1.42.5 (29-Jul-2012)
DSK n’est pas un périphérique spécial en mode bloc.
Procéder malgré tout ? (o,n) o
mkfs.ext2: Système de fichiers plus grand que la taille apparente du périphérique
Procéder malgré tout ? (o,n) o
Rejet des blocs de périphérique : complété
Étiquette de système de fichiers=
Type de système d’exploitation : Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
50000 i-noeuds, 200000 blocs
10000 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=1
Nombre maximum de blocs du système de fichiers=67371008
25 groupes de blocs
8192 blocs par groupe, 8192 fragments par groupe
2000 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
8193, 24577, 40961, 57345, 73729

Allocation des tables de groupe : complété
Écriture des tables d’i-noeuds : complété
Écriture des superblocs et de l’information de comptabilité du système de
fichiers : complété

francois@portos:/tmp$ ls -l DSK
-rw-r–r-- 1 francois francois 204800000 sept. 23 14:13 DSK
francois@portos:/tmp$ du -sh DSK
6,6M DSK
francois@portos:/tmp$
[/code]
Tu as un fichier de taille virtuelle 200M mais occupant 6,4M sur le disque.
3) Tu l’utilises

[code]francois@portos:/tmp$ su
Mot de passe :
root@portos:/tmp# mount -o loop DSK /mnt
root@portos:/tmp# cp dodisk* /mnt
root@portos:/tmp# cd /mnt
root@portos:/mnt# gcc -o dodisk dodisk.c
root@portos:/mnt# ls -l
total 21
-rwxr-xr-x 1 root root 7249 sept. 23 14:14 dodisk
-rw-r–r-- 1 root root 193 sept. 23 14:14 dodisk.c
drwx------ 2 root root 12288 sept. 23 14:13 lost+found
root@portos:/mnt# ./dodisk

root@portos:/mnt# cd
root@portos:~# umount /mnt
root@portos:~# exit
francois@portos:/tmp$ ls -l DSK
-rw-r–r-- 1 francois francois 204800000 sept. 23 14:15 DSK
francois@portos:/tmp$ du -sh DSK
6,7M DSK
francois@portos:/tmp$
[/code]Voilà, c’est exactement ce que tu veux je pense, sans virtualbox ou autre. Rien que le noyau.

je vais tester ta solution dessuite.
Si ca fonctionne correctement, c’est exactement ce qu’il me fallait.

merci beaucoup :slightly_smiling:

Il semblerai que ta solution fonctionne parfaitement,

la commande df ne prend pas en compte la taille “virtuel” du fichier mais bien sa taille sur le disque, donc it’s DONE.

Merci à vous tous

Pour information, ce type de fichier est appelé en anglais “sparse file”. Je ne connais pas la traduction française : “épars”, “éparpillé”, “dispersé”, “à trous”… ? Les blocs qui le composent ne sont alloués que lorsqu’on écrit dedans. Par contre, ça ne marche pas dans l’autre sens : si on supprime un fichier du système de fichiers contenu dans le fichier “sparse”, les blocs de ce dernier qui contenaient le fichier supprimé ne sont pas libérés. La taille effective du fichier reste donc à la taille maximum occupée.

A noter que c’est très différent des fichiers de disque virtuel utilisés par les machines virtuelles telles que VirtualBox ou VMware car ces derniers ne sont pas “sparse” au sens du système de fichiers : ce sont des fichiers qui grossissent normalement et ont une table indiquant à quelle position dans le fichier se trouve tel secteur du disque virtuel.

Pour mkfs et les outils associés (comme badblocks, fdisk), la taille est traditionnellement exprimée en blocs de 1024 octets, pas en secteurs de 512 octets, ce qu’on peut vérifier avec la taille apparente du fichier résultant. A ne pas confondre avec la taille de bloc d’allocation du système de fichiers, qui est aussi 1024 octets ici mais est généralement de 4096 octets pour les volumes assez gros. Ouais, c’est un peu le bordel…

[quote=“PascalHambourg”]

Pour mkfs et les outils associés (comme badblocks, fdisk), la taille est traditionnellement exprimée en blocs de 1024 octets, pas en secteurs de 512 octets, ce qu’on peut vérifier avec la taille apparente du fichier résultant. A ne pas confondre avec la taille de bloc d’allocation du système de fichiers, qui est aussi 1024 octets ici mais est généralement de 4096 octets pour les volumes assez gros. Ouais, c’est un peu le bordel…[/quote]
Exact, c’est le bordel!

[moderation]Merci de lire les “Règles d’usage du forum” en ce qui concerne la structure du titre d’un fil.[/moderation]