Comment obtenir la liste complète et exacte des systèmes de fichiers montés sous Linux?

151

J'utilise habituellement mountpour vérifier quels systèmes de fichiers sont montés. Je sais aussi qu'il y a un lien entre mountet /etc/mtabmais je ne suis pas sûr des détails. Après avoir lu Comment vérifier si / proc / est monté, je suis plus confus.

Ma question est la suivante: comment obtenir la liste la plus précise des systèmes de fichiers montés? Devrais-je simplement utiliser mount, ou lire le contenu de /etc/mtab, ou le contenu de /proc/mounts? Qu'est-ce qui donnerait le résultat le plus fiable?

Xanpeng
la source
3
Vous devriez également lire la réponse acceptée à cette question: unix.stackexchange.com/questions/12040/…
nozimica
Je ne peux pas m'empêcher de faire un lien vers Qu'est-ce que / etc / mtab dans Linux? car il couvre des détails non Linux qu’aucune des réponses fournies ici ne donne.
Weijun Zhou le

Réponses:

141

La liste définitive des systèmes de fichiers montés est dans /proc/mounts.

Si vous avez une forme quelconque de conteneur sur votre système, /proc/mountsne répertorie que les systèmes de fichiers contenus dans votre conteneur actuel. Par exemple, dans un chroot , /proc/mountsrépertorie uniquement les systèmes de fichiers dont le point de montage est dans le chroot. ( Il existe des moyens d'échapper au chroot, l'esprit. )

Il y a aussi une liste des systèmes de fichiers montés dans /etc/mtab. Cette liste est maintenue par les commandes mountet umount. Cela signifie que si vous n'utilisez pas ces commandes (ce qui est assez rare), votre action (montage ou démontage) ne sera pas enregistrée. En pratique, c'est principalement dans un chroot que vous trouverez des /etc/mtabfichiers très différents de l'état du système. De plus, les montages effectués dans le chroot seront reflétés dans le chroot, /etc/mtabmais pas dans le corps principal /etc/mtab. Les actions exécutées /etc/mtabsur un système de fichiers en lecture seule ne sont pas non plus enregistrées.

La raison pour laquelle vous souhaitez parfois consulter /etc/mtabde préférence ou en complément /proc/mountsest que, du fait qu’elle a accès à la ligne de commande de montage, elle est parfois capable de présenter des informations d’une manière plus facile à comprendre; Par exemple, vous voyez les options de montage comme demandé (alors que la /proc/mountsliste contient également les mountvaleurs par défaut du noyau et du noyau), et les montages de liaison apparaissent tels quels dans /etc/mtab.

Gilles
la source
1
Quel est l'intérêt de mountmaintenir /etc/mtabsi on ne peut pas compter sur lui? Ne serait-il pas préférable de mountprésenter les informations à la /proc/mountsplace?
Piotr Dobrogost
2
@PiotrDobrogost /etc/mtabpeut enregistrer des informations non suivies par le noyau, telles que les options demandées à l'origine, et des montages de liaison apparaissant comme tels au lieu d'apparaître comme des entrées dupliquées pour les périphériques. Néanmoins, de nombreuses distributions commencent à créer /etc/mtabun lien symbolique vers /proc/mounts.
Gilles
3
Néanmoins, de nombreuses distributions commencent à créer /etc/mtabun lien symbolique vers /proc/mounts. C'est bon à entendre - ajouter cette information à la réponse la rendrait encore meilleure. Pensez-vous que le suivi des options demandées par le noyau serait faisable et bénéfique?
Piotr Dobrogost
2
Notez que vous devrez libérer le contenu de / proc / mounts. Comme décrit sur la page getmntent (3), les espaces (\ 040), tab (\ 011), nouvelle ligne (\ 012) et barre oblique inversée (\ 134) doivent être traités spécifiquement. Surtout si les montages utilisateur sont activés, vous devrez faire très attention lorsque vous travaillez avec ces chemins.
Eric
2
Voir aussi une autre réponse pour utiliser la commande findmntqui est la méthode recommandée depuis 2010 et probablement la seule méthode sûre dans un proche avenir lorsque les espaces de noms de montage seront communs.
Marki555
69

À partir de la version 2.18 (juillet 2010), util-linux un outil vous permet d'afficher une liste des systèmes de fichiers actuellement montés:

findmnt

Vous pouvez passer de l'arborescence par défaut à la vue liste -l, définir des colonnes de sortie avec -o(similaire à lsblk), filtrer les résultats en fonction du type de système de fichiers avec -tetc ...

findmnt -lo source, cible, type, étiquette, options, utilisé -t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

Pour plus de détails, lisez la manpage (et findmnt --helppour obtenir la liste des colonnes disponibles)

don_crissti
la source
33

Peut-être parce que cela fait 5 ans que cette question a reçu une réponse, les choses ont changé. Le cat /proc/mountscrée beaucoup d'informations que vous ne se soucient pas. Aujourd'hui, à mon humble avis, je trouve que c'est la solution ultime.

df -h --output=source,target

Lorsque vous lisez les pages de manuel, vous pouvez faire toutes sortes d’options, mais c’est ce que vous faites. Par exemple, pour nettoyer davantage les résultats, vous pouvez exclure les types de fichiers de "tmpfs" avec cette commande:

df -hx tmpfs --output=source,target

df fonctionne au niveau du système de fichiers et non au niveau du fichier.

Les commandes ci-dessus incluent également les montages réseau.

Pour voir un peu plus d'informations, utilisez ceci:

df -hT

REMARQUE Avec des connexions réseau montées lentement, cela peut prendre plusieurs minutes!

Si vous ne possédez pas ou ne vous souciez pas des connexions réseau montées (et que vous avez des autorisations root), c'est encore mieux:

sudo lsblk -f
Meule
la source
Vous n’êtes pas obligé d’être root, mais certains champs / colonnes (tels que Label) contiendront des données nulles, ce qui peut être satisfaisant dans la mesure où les questions veulent savoir quels systèmes de fichiers sont montés.
Rick
Ubuntu. Cependant, je viens de découvrir "findmnt" qui n'utilise pas root et répertorie les systèmes de fichiers montés sur le réseau. Je pensais à modifier ma réponse pour inclure cette connaissance.
Rick
:-) J'en ai marre de donner un vote à votre réponse, mais je ne peux pas jusqu'à ce que j'ai un représentant de 15 ans
Rick le
1
Au fait, si vous essayez d'utiliser --outputquelque chose comme Ubuntu 12 qui n'accepte pas ces options, jetez un œil à la findmntréponse de don_crissti ci-dessous.
Mat Schaffer
findmntsemble avoir besoin de capacités plus élevées (testé avec root; la racine a toutes les capacités) pour afficher les étiquettes.
ctrl-alt-delor
23

La plupart du temps, mountc'est la méthode la plus pratique. Pour une liste complète et exacte des systèmes de fichiers actuellement montés, vous devriez lire le contenu de /proc/mounts(par exemple, avec cat /proc/mounts).

Par exemple, si le montage en /lecture-écriture échouait et qu'il était alors monté en lecture seule comme solution de secours /etc/mtab(que la mountcommande lit pour vous dire ce qui est monté, et écrit - s'il le peut - quand il modifie ce qui est monté) ne sera pas mis à jour pour refléter que /(qui contient /etc/mtab) est actuellement monté en lecture seule. Dans cette situation, l'exécution mountvous indiquerait généralement (de manière incorrecte) que le /script a été monté en lecture / écriture.

Dans des conditions normales (lorsque le système de fichiers qui le contient peut être écrit), /etc/mtabcontient la liste des systèmes de fichiers actuellement montés. Ceci ne doit pas être confondu avec /etc/fstab, qui contient une liste de systèmes de fichiers qui sont supposés être montés automatiquement au démarrage du système.

Bien sûr, si le /procsystème de fichiers virtuel n'est pas monté, vous ne pouvez en lire aucun fichier virtuel, ce qui inclurait /proc/mounts. C'est très rarement le cas. Dans cette situation, mountest probablement votre meilleure option pour voir ce qui est monté.

Eliah Kagan
la source