Linux mount命令访问文件系统,ISO镜像,USB,网络驱动器
在本文中,我将介绍使用Linux mount命令执行临时和永久挂载的各种主题。
我们将尝试使用Linux mount命令访问文件系统,U盘,ISO镜像,网络驱动器,并使用带有示例的umount命令来卸载它们。
使用Linux mount命令安装U盘之前,必须知道如何列出U盘并检查Linux中的USB端口,以便知道Linux中已连接的U盘。
我还将分享一些fstab示例,说明fstab选项和使用Linux挂载命令永久挂载的语法。
我已使用RHEL/CentOS 7/8来演示本文中有关Linux安装命令及其用法的示例。
Linux挂载命令场景和示例
下面,我将通过示例介绍使用Linux mount命令临时和永久访问文件系统的各种方案。
挂载文件系统(ext3,ext4,xfs等)
使用Linux mount命令,我们可以挂载各种类型的系统文件系统。
但这仅对当前会话有效(不适用于永久重启)。
对于这种要求,我们可以将/mnt挂载点与Linux挂载命令一起使用。
挂载文件系统的语法
# mount [-t fstype] DEVICE DIR
其中
-t The argument following the -t is used to indicate the filesystem type. DEVICE Here DEVICE is our File System /dev/sdb1 DIR Here DIR is our target mount point
说明:
如果没有给出-t
选项,或者如果指定了自动类型,mount将尝试猜测所需的类型。
Mount使用blkid
库来猜测文件系统类型。
如果那没有打开任何看起来很熟悉的东西,mount将尝试读取文件/etc/filesystems
,或者如果文件不存在,则读取/proc/filesystems
。
因此我们可以挂载/dev/sdb1
而不指定文件系统类型
# mount /dev/sdb1 /mnt
或者带有-t选项
# mount -t xfs /dev/sdb1 /mnt
要永久地挂载文件系统,必须在/etc/fstab
中添加设备和挂载点条目。
我将创建一个新的挂载点目录
# mkdir /mydata
现在我们可以将xfs文件系统/dev/sdb1
挂载在/mydata
挂载点上。
# mount -t xfs /dev/sdb1 /mydata
但这又是暂时的,要永久挂载文件系统,我们必须以以下fstab
格式更新/etc/fstab
。
我的设置中的fstab
示例:
# echo "UUID=2c566ef5-fe73-4e1c-aa71-9a8cd77c0b31 /mydata xfs defaults 0 0" >> /etc/fstab
如何获取UUID和文件系统类型?
使用blkid
获取文件系统的UUID
# blkid /dev/sdb1 /dev/sdb1: UUID="2c566ef5-fe73-4e1c-aa71-9a8cd77c0b31" TYPE="xfs" PARTUUID="09181a39-01"
在同一输出中,我们可以看到文件系统类型为XFS
fstab选项有哪些不同?
在/etc/fstab
中,每列有6个不同的部分,并具有不同的可能选项。
每行分为六个数据字段,用空格隔开。
以下是不同的fstab选项
要挂载的设备(这里我们使用了UUID,或者我们也可以使用/dev/sdb1)。
挂载点(/mydata)。
文件系统类型(xfs)。
挂载选项(默认)。
转储级别(" 0")。
此字段与转储命令相关,很少使用。fsck传递字段(" 0")。
值为0表示"在系统引导期间不要在此文件系统上运行fsck",而值为1或者更高的含义是"在系统引导期间在此文件系统上运行fsck"。
挂载ISO文件
挂载ISO文件有两种可能的方案:
从虚拟介质挂载ISO文件
挂载ISO文件DVD
在任何一种情况下,要挂载ISO文件,我们都必须使用iso9660
作为文件系统类型以及Linux mount命令。
说明:
在运行GUI的Linux发行版中,当自动安装可移动媒体(例如CD-ROM或者DVD)时,通常会在/media
目录下提供它们。
在没有正在运行的GUI的系统上,不会发生此自动挂载过程。
我们可以配置系统,以便普通用户可以使用/etc/fstab
条目挂载可移动设备:
虚拟媒体ISO镜像
在RHEL/CentOS 7上,/dev/srX
文件系统下的虚拟介质上的任何ISO文件都可用。
例如,我的ISO文件位于/dev/sr0
和/dev/sr1
下。
# lsscsi [0:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0 [1:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr1 [2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda
要使用Linux mount命令从虚拟媒体在/media
上装载ISO文件,请执行以下操作:
# mount -t iso9660 /dev/sr0 /media mount: /media: WARNING: device write-protected, mounted read-only.
要使用/etc/fstab
永久挂载ISO文件,我们使用类似于fstab
格式的语法,就像我们以前用来挂载文件系统一样。
我的设置中的fstab
示例
# echo "/dev/sr0 /media iso9660 defaults 0 0" >> /etc/fstab
ISO DVD镜像
如果Linux系统上有可用的ISO DVD镜像文件,则可以使用Linux mount命令再次使用iso9660作为文件系统类型来挂载ISO文件DVD:
# mount -t iso9660 -o loop /root/rhel-8.1-x86_64-dvd.iso /media/ mount: /media: WARNING: device write-protected, mounted read-only.
再次使用/etc/fstab永久挂载ISO DVD文件,我们使用类似的fstab格式。
下面是我安装ISO镜像的fstab
示例
# echo "/root/rhel-8.1-x86_64-dvd.iso /media iso9660 defaults 0 0" >> /etc/fstab
挂载U盘
在我分享安装U盘的步骤之前,我们必须熟悉检查并列出连接到Linux主机的USB设备并检查USB端口。
有多种方法和命令可用于列出USB设备并检查USB端口,我将尝试在此处共享其中一些:
6条列出USB设备并检查USB端口的命令
下面,将介绍我们可以在Linux中使用的各种命令,以查看和列出连接到Linux主机的USB设备并检查USB端口。
1. Journalctl或者/var/log/messages
我们可以使用journalctl或者/var/log/messages来检查连接到Linux机器的USB端口和列出USB设备。
以下是我在RHEL/CentOS 7/8节点上的/var/log/messages
的摘要。
观察突出显示的部分以列出已连接的USB设备。
Nov 20 22:27:33 centos-8 kernel: usb 1-1: new full-speed USB device number 2 using ohci-pci Nov 20 22:27:33 centos-8 kernel: usb 1-1: config 1 interface 0 altsetting 0 endpoint 0x81 has invalid maxpacket 512, setting to 64 Nov 20 22:27:33 centos-8 kernel: usb 1-1: config 1 interface 0 altsetting 0 endpoint 0x2 has invalid maxpacket 512, setting to 64 Nov 20 22:27:33 centos-8 kernel: usb 1-1: New USB device found, idVendor=0781, idProduct=5567, bcdDevice= 1.00 Nov 20 22:27:33 centos-8 kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Nov 20 22:27:33 centos-8 kernel: usb 1-1: Product: Cruzer Blade Nov 20 22:27:33 centos-8 kernel: usb 1-1: Manufacturer: SanDisk Nov 20 22:27:33 centos-8 kernel: usb 1-1: SerialNumber: 4C531001480518118400 Nov 20 22:27:33 centos-8 kernel: usb-storage 1-1:1.0: USB Mass Storage device detected Nov 20 22:27:33 centos-8 kernel: scsi host4: usb-storage 1-1:1.0 Nov 20 22:27:33 centos-8 kernel: usbcore: registered new interface driver usb-storage Nov 20 22:27:33 centos-8 kernel: usbcore: registered new interface driver uas Nov 20 22:27:34 centos-8 kernel: scsi 4:0:0:0: Direct-Access SanDisk Cruzer Blade 1.00 PQ: 0 ANSI: 6 Nov 20 22:27:34 centos-8 kernel: sd 4:0:0:0: Attached scsi generic sg4 type 0 Nov 20 22:27:34 centos-8 kernel: sd 4:0:0:0: [sdc] 30595072 512-byte logical blocks: (15.7 GB/14.6 GiB) Nov 20 22:27:34 centos-8 kernel: sd 4:0:0:0: [sdc] Write Protect is off Nov 20 22:27:34 centos-8 kernel: sd 4:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA Nov 20 22:27:34 centos-8 kernel: sdc: sdc1 Nov 20 22:27:34 centos-8 kernel: sd 4:0:0:0: [sdc] Attached SCSI removable disk
2. lsusb
我们可以使用lsusb在Linux中检查USB端口。
lsusb工具是" usbutils" rpm的一部分。
因此,请安装usbutils来检查Linux中的USB端口。
例如,我在端口1上连接了一个USB:
# lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/12p, 12M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 12M
3. lsscsi
我们可以列出使用lsscsi连接到Linux的所有设备。
因此,要列出USB设备,我们也可以在Linux中使用lsscsi命令。
其中我的U盘安装在/dev/sdc
上
# lsscsi [0:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0 [1:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr1 [2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda [3:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sdb [4:0:0:0] disk SanDisk Cruzer Blade 1.00 /dev/sdc
4. lsblk
使用lsblk显示和列出连接到Linux机器的USB设备和分区。
# lsblk /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdc 8:32 1 14.6G 0 disk └─sdc1 8:33 1 14.6G 0 part
5. blkid
使用blkid列出USB设备和所有必需的详细信息。
如我们所见,我的U盘是NTFS文件系统。
如果执行不带任何参数的blkid
,它将列出所有连接到Linux主机的设备。
# blkid /dev/sdc1 /dev/sdc1: LABEL="hynman-16G" UUID="B48646258645E886" TYPE="ntfs" PARTUUID="2633de4d-01"
6. fdisk
使用fdisk
可以列出所有连接的存储设备。
我们将使用fdisk
列出USB设备。
如果我们有多个驱动器连接到Linux机器,则列表可能会很长,例如,我们可以查看fdisk -l
输出的末尾。
Disk /dev/sdc: 14.6 GiB, 15664676864 bytes, 30595072 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes/512 bytes I/O size (minimum/optimal): 512 bytes/512 bytes Disklabel type: dos Disk identifier: 0x2633de4d Device Boot Start End Sectors Size Id Type /dev/sdc1 * 2048 30595071 30593024 14.6G 7 HPFS/NTFS/exFAT
如我们所见,这是一块大小为14.6 GB的dos磁盘,类型为HPFS/NTFS/exFAT,因此这很可能是我们的U盘,我们可以再次使用lsscsi或者以上列表中的任何其他命令进行确认。
带有NTFS文件系统的U盘
现在我们可以列出USB设备并检查USB端口,使用Linux mount命令以NTFS文件系统类型安装U盘,我们在Linux中需要ntfs-3g
驱动程序。
如果我们尝试在没有ntfs-3g
驱动程序的情况下挂载U盘,则挂载将失败
# mount -t ntfs-3g /dev/sdc1 /mnt mount: /mnt: unknown filesystem type 'ntfs'.
说明:
默认情况下,NTFS在RHEL中是不支持的,因此我们必须在RHEL节点上安装EPEL repo才能访问ntfs-3g
驱动程序。
ntfs-3g是NTFS驱动程序,NTFS支持几种文件名名称空间:DOS,Win32和POSIX。
尽管ntfs-3g驱动程序可以处理所有这些驱动程序,但出于最大的可移植性和互操作性原因,它总是在POSIX名称空间中创建新文件。
# yum -y install ntfs-3g.x86_64
创建一个挂载点
# mkdir /mnt/usb
现在尝试使用Linux挂载命令挂载U盘
# mount -t ntfs /dev/sdc1 /mnt/usb
挂载成功
# df -h /mnt/ Filesystem Size Used Avail Use% Mounted on /dev/sdc1 15G 364M 15G 3% /mnt/usb
使用与上述示例类似的fstab格式,以ntfs
文件系统类型永久安装U盘。
下面是" fstab"示例,用于将U盘与ntfs文件系统一起挂载。
# echo "UUID="B48646258645E886" /mnt/usb ntfs defaults 0 0" >> /etc/fstab
提示:
建议使用blkid
进行永久安装,而不要使用驱动器名称。
使用blkid
来获取U盘的UUID。
具有FAT32或者vFAT文件系统的U盘
我们将列出USB设备,检查USB端口并使用blkid
检查文件系统类型,因为我们看到此U盘的文件系统类型为vFAT。
要使用Linux mount命令挂载具有vfat文件系统类型的U盘,我们需要使用vfat模块。
# blkid /dev/sdc1 /dev/sdc1: LABEL="hynman-16G" UUID="5E92CAC292CA9E41" TYPE="vfat" PARTUUID="2633de4d-01"
检查vfat
模块是否已在系统上加载:
# lsmod | grep vfat vfat 17411 0 fat 65913 1 vfat
如果未加载vfat
,请运行以下命令加载:
# modprobe vfat
提示:
我们必须安装dosfstools rpm来加载与vfat相关的模块和工具,才能将U盘安装到vfat文件系统中。
下一步,使用Linux mount命令将U盘与FAT32或者vFAT文件系统一起安装:
# mount -t vfat /dev/sdc1 /mnt
与NTFS文件系统类型类似,使用相同的fstab
格式,在fstab
下面的示例中使用/etc/fstab
永久安装U盘。
# echo "UUID="5E92CAC292CA9E41" /mnt/usb vfat defaults 0 0" >> /etc/fstab
提示:
建议使用blkid
进行永久安装,而不要使用驱动器名称。
使用blkid
来获取U盘的UUID。
挂载网络驱动器
我有一个位于192.168.0.121的NFS服务器,并在该服务器上共享了/mydata目录。
从NFS挂载网络驱动器
语法:
mount -t <fstype> -o vers=<version> <nfs_server>:<shared_path_on_nfs_server> <mount_point_on_localhost>
使用NFSv4
挂载NFS网络驱动器
# mount -t nfs -o vers=4 192.168.0.121:/mydata /mnt
使用NFSv3
挂载NFS网络驱动器
# mount -t nfs -o vers=3 192.168.0.121:/mydata /mnt
提示:
我们需要在NFS服务器和客户端节点上安装nfs-utils
rpm,才能使用NFS挂载网络驱动器。
要永久使用/etc/fstab挂载网络驱动器,fstab格式将保持不变,除了第一列中必须提供NFS服务器详细信息和源路径。
下面是我的NFS共享(/mydata
)在192.168.0.121上的fstab
示例
# echo "192.168.0.121:/mydata /mnt nfs defaults 0 0" >> /etc/fstab
如何卸载文件系统和其他可移动设备?
使用umount命令来卸载任何类型的文件系统,U盘,网络驱动器或者ISO镜像。
umount <mount_point>
因此,如果我的文件系统挂载在/mnt上
# umount /mnt
我们可能会遇到错误umount:/mnt/usb:在尝试卸载umount文件系统时,目标有时很忙。
这意味着文件系统正在使用中,该错误类似于我们在尝试弹出U盘时在Windows中看到的错误"设备正在使用中"。
在这种情况下,我们可以使用-l来使用lazy umount
。
# umount -l /mnt/usb
这意味着一旦其他进程不使用/mnt/usb
,它将自动卸载
或者,我们也可以使用lsof
查找正在使用/usb/mnt
的进程。
# lsof /mnt/usb/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 7033 root cwd DIR 8,49 4096 5 /mnt/usb lsof 12636 root cwd DIR 8,49 4096 5 /mnt/usb lsof 12637 root cwd DIR 8,49 4096 5 /mnt/usb
然后,我们可以决定杀死这些进程(杀死-9 <PID>),但要记住,这样做会杀死所有正在进行的任务或者操作。
警告:
不要在没有知识的情况下终止任何过程,因为这在生产环境中可能是危险的。