O comando mount
pode ser considerado como um comando de frontend para uma grande quantidade de comandos de montagem de arquivos. Existem estes que são executáveis reais que podem ser chamados para fazer o levantamento pesado de montagem para seus respectivos tipos de sistema de arquivos.
$ ls /usr/sbin/ | grep mount
mount.cifs
mount.fuse
mount.glusterfs
mount.lowntfs-3g
mount.nfs
mount.nfs4
mount.ntfs
mount.ntfs-3g
mount.ntfs-fuse
NOTA: Mas esta é apenas uma lista parcial. Existem outros tipos com os quais mount
também pode lidar. Estes são construídos no kernel do Linux.
Como é estruturado dessa maneira, o conceito de montagem pode ser aplicado a vários tipos de sistema de arquivos. Você pode informar explicitamente a mount
através do parâmetro -t
que tipo de sistema de arquivos o destino que você está tentando montar é.
A página man do mount
contém muitos outros tipos com os quais o mount
é capaz de lidar.
trecho
-t, --types vfstype
The argument following the -t is used to indicate the filesystem
type. The filesystem types which are currently supported include:
adfs, affs, autofs, cifs, coda, coherent, cramfs, debugfs,
devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs, iso9660,
jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs,
reiserfs, romfs, squashfs, smbfs, sysv, tmpfs, ubifs, udf, ufs,
umsdos, usbfs, vfat, xenix, xfs, xiafs. Note that
coherent, sysv and xenix are equivalent and that xenix and
coherent will be removed at some point in the future — use sysv
instead. Since kernel version 2.1.21 the types ext and xiafs do
not exist anymore. Earlier, usbfs was known as usbdevfs. Note,
the real list of all supported filesystems depends on your kernel.
Sob o capô
Você pode usar o comando strace
para ver o que está acontecendo quando diferentes tipos de sistema de arquivos são montados.
Exemplos
Os seguintes comandos foram executados como root.
CIFS
$ strace mount -t cifs -o username=sam //bart/mp3s-1 /mnt
...
stat("/sbin/mount.cifs", {st_mode=S_IFREG|0755, st_size=41024, ...}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2469308b50) = 21593
wait4(-1, Password for sam@//bart/mp3s-1: *************
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 21593
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21593, si_status=0, si_utime=0, si_stime=0} ---
NFS
$ strace mount -t nfs mulder:/export/raid1/data /mnt
...
stat("/sbin/mount.nfs", {st_mode=S_IFREG|S_ISUID|0755, st_size=110720, ...}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fc76c957b50) = 22017
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 22017
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22017, si_status=0, si_utime=0, si_stime=0} ---
arquivo ISO via loopback
$ strace mount -o loop /home/saml/Downloads/apps_archive/monitoring/FAN/FAN-2.3-x86_64.iso /mnt
...
mount("/dev/loop0", "/mnt", "iso9660", MS_MGC_VAL|MS_RDONLY, NULL) = 0
Portanto, com os exemplos acima, você pode ver que em alguns casos o mount está fazendo a montagem diretamente, como no ISO via loopback, enquanto nos outros exemplos ele está clonando a si mesmo e chamando o mount.<filesytem>
dentro de uma pilha filha. / p>