如何从Linux终端安装和卸载存储设备
可以使用终端安装,卸载和重新安装Linux和类似macOS的类Unix操作系统中的文件系统。这是一个功能强大且用途广泛的工具,这里是我们需要了解的所有内容。
Linux文件系统
Linux,macOS和其他类似Unix的操作系统中的文件系统不会像Windows那样使用单独的卷标识符来存储设备。 Windows为每个卷分配一个驱动器号,例如C:或者D :,每个卷的文件系统是位于该驱动器号下方的目录树。
在Linux中,文件系统是多合一目录树。挂载的存储设备将其文件系统嫁接到该树上,因此它似乎是一个内聚文件系统的组成部分。新安装的文件系统可通过其安装目录访问。该目录称为该文件系统的安装点。
许多文件系统会在启动时自动挂载,或者在运行时动态存储为连接到计算机的存储卷。谨慎的系统管理员可以关闭运行时自动安装功能,以便他们可以控制与系统的连接。
这意味着在运行时连接的存储设备可能不会自动挂载,需要手动挂载。手动挂载文件系统使我们可以决定该文件系统,例如挂载点将在何处以及文件系统是只读还是读写。
无论是出于必要,还是通过选择,使用mount,umount和remount命令可以控制Linux系统的这一重要方面。
使用mount询问文件系统
Mount有很多选项,但是要列出计算机上所有已挂载的文件系统根本不需要任何选项,只需键入mount
并按Enter:
" mount"将在终端窗口中列出所有连接的文件系统。
很难通过数据转储来查找所需的内容。
我们可以通过要求mount
仅列出我们感兴趣的文件系统来优化输出。 -t选项(类型)告诉mount所报告的文件系统类型。
mount -t tmpfs
mount -t ext4
例如,我们要求mount
仅列出tmpfs
文件系统。我们得到了更易于管理的输出。
tmpfs文件系统看起来好像是一个常规的已挂载文件系统,但实际上存储在易失性内存中,tmp代表临时性,而不是永久性存储设备上。
我们需要用tmpfs
参数代替我们感兴趣的文件类型。
我们还发布了一个命令来列出ext4
文件系统。在这台测试计算机上,有一个单独的" ext4"文件系统,它是在设备" sda"上安装的第一个存储设备,通常是主硬盘驱动器,并安装在" /"上,这是文件系统树的根。
其他指标表示:
rw:文件系统可读可写。
relatime:内核正在使用一种优化的方案来记录文件访问和修改元数据。
errors = remount -o:如果检测到足够严重的错误,将以只读模式重新安装文件系统以进行诊断。
相关:我们应该使用哪个Linux文件系统?
使用df询问文件系统
df命令也可以用来显示哪些文件系统被挂载以及它们的挂载点其中。
不带参数的df会给我们带来与mount相同的信息过载问题。例如,在UbuntuLinux中,为每个使用snap安装的应用程序创建了一个squashfs伪文件系统。 `命令。谁想看所有这些?
要强制df忽略任何其他文件系统类型,请使用-x(排除)选项:
df -x squashfs
我们可以轻松地查看文件系统的名称,它们的容量,已用和可用空间以及它们的安装点。
相关:如何从Linux终端查看可用磁盘空间和磁盘使用情况
在fstab中重新挂载所有文件系统
引导时挂载的所有文件系统在名为" fstab"的文件中都有条目,该文件位于" / etc"中的文件系统表中。
我们可以使用"挂载"来强制刷新并重新挂载" fstab"中列出的所有文件系统。在正常操作条件下,这不是必需的。如果我们对多个文件系统有问题,它确实会发挥作用。
我们需要使用sudo
,因此系统会提示我们输入密码。
sudo mount -a
诚然,在正确运行的计算机上,它有点让人难以理解。
但是,在出现文件系统问题的计算机上,重新安装可能会解决问题。如果这没有发生,那么至少我们会在屏幕上和系统日志中获得诊断消息,这些消息将指导我们查找问题的原因。
挂载ISO镜像
挂载ISO镜像很容易,因此我们可以将其内容作为文件系统的一部分进行访问。
这将适用于任何ISO镜像。在此示例中,我们恰好使用了Tiny Core LinuxISO,因为它体积小巧且下载速度快。 (一个带有GUI的小型Linux发行版,大小为18 MB!我们可能有大于此大小的.mp3文件。)
在与ISO镜像相同的目录中,发出此命令。替换要安装的ISO文件的名称。
sudo mount -t iso9660 -o loop TinyCore-current.iso /mnt
因为我们需要使用sudo
,所以我们需要输入密码。
-t(类型)选项告诉mount
我们正在安装哪种文件系统。这是一个ISO文件,因此我们提供iso9660
类型说明符。
-o(选项)标志用于将额外的参数传递给mount。我们的参数是" loop"。
我们正在使用"循环"来强制"挂载"使用循环设备文件来连接到我们的ISO镜像。循环设备文件允许挂载和处理文件(如ISO镜像),就好像它是存储设备一样。
设备文件是用作接口的特殊文件,因此连接的设备看起来就像是普通的文件系统文件。这是Linux中所有内容的一部分,是文件设计理念。
设备文件有很多不同的类型。我们在前面提到的一个例子中提到,该测试机上唯一的" ext4"文件系统安装在" /"上,称为" sda"。
更准确地说," ext4"文件系统位于通过" / dev / sda"设备文件连接到文件系统的存储设备上,并且该存储设备上的文件系统安装在" /"上。
当然,我们必须提供ISO镜像的名称,并且需要让mount
知道我们希望将文件系统挂载的位置。我们选择了/ mnt
。
已安装ISO镜像。终端窗口中会出现一个提示,即ISO镜像始终以只读模式挂载。
探索ISO镜像
现在已经安装了它,我们可以以与文件系统其他任何部分相同的方式浏览ISO镜像中的目录。让我们列出ISO镜像中的文件。它被安装在/ mnt
上。
ls /mnt
ls /mnt/cde/
卸载ISO镜像
要卸载已挂载的文件系统,请使用umount命令。注意,在u和m之间没有n,它是umount
而不是unmount。
我们必须告诉umount
我们要卸载的文件系统。通过提供文件系统的挂载点来实现。
sudo umount /mnt
没有消息就是好消息。如果没有什么要报告的,那么一切进展顺利。
创建挂载点
我们可以创建和使用自己的挂载点。我们将创建一个名为" isomnt"的文件,并在其上挂载我们的ISO镜像。挂载点只是一个目录。因此,我们可以使用mkdir
创建我们的新挂载点。
sudo mkdir /media/dave/isomnt
现在,我们可以使用与以前相同的命令格式来挂载我们的ISO镜像。这次我们不会将其安装在/ mnt
上,而是将其安装在/ media / dave / isomnt /
上:
sudo mount -r -t iso9660 -o loop TinyCore-current.iso /media/dave/isomnt/
现在,我们可以从新的挂载点访问挂载的文件系统。
ls /media/dave/isomnt/cde/optional
但是这些途径变得很长。这很快就会变得令人厌烦。让我们为此做些事情。
绑定安装点
我们可以将安装点绑定到另一个目录。然后,可以通过原始安装点或者绑定到该文件系统的目录来访问已安装的文件系统。
这是一个可行的示例。我们将在主目录中创建一个名为iso
的目录。然后,将ISO镜像/ media / dave / isomnt
的安装点绑定到主目录中的新iso
目录。
我们将能够通过原始挂载点/ media / dave / isomnt
以及新的iso
目录访问ISO镜像。 -B(绑定)选项需要安装点的名称和将其绑定到的目录的名称。
mkdir iso
sudo mount -B /media/dave/isomnt/ iso
ls iso
ls /media/dave/isomnt
cd iso
ls
cd cde
对绑定使用umount
已将其挂载点绑定到另一个目录的文件系统需要从其挂载点和绑定点进行卸载。
即使我们从原始安装点卸载文件系统,我们仍然可以从其绑定目录访问文件系统。还必须从该目录卸载文件系统。
sudo umount /media/dave/isomnt
ls iso
sudo umount iso
ls iso
挂载软盘
软盘驱动器(其中装有软盘)是一种存储设备。这意味着将使用sd(用于存储设备)设备文件来连接到物理设备。我们必须确定哪个是下一个免费的sd设备文件。我们可以通过将df
的输出通过grep
传递到管道中并其中查找带有sd的条目来做到这一点。
df | grep /dev/sd
在这台计算机上,正在使用一个sd设备文件。这是/ dev / sda
。下一个发布的sd设备文件将是/ dev / sdb。这意味着当我们将软盘驱动器连接到计算机时,Linux将使用/ dev / sdb
来连接到软盘驱动器。
我们将告诉mount
将文件系统挂载到与/ dev / sdb
连接到/ mnt
挂载点的软盘驱动器中。
将软盘插入软盘驱动器中,然后将软盘驱动器连接到计算机上的USB端口。发出以下命令:
sudo mount /dev/sdb /mnt
文件系统标签
我们可以将-l
(标签)选项与mount
一起使用,以找出标签添加在文件系统上的内容。标签只不过是任意名称。它们没有功能目的。
我们使用-t
(类型)选项来要求mount
只报告vfat
文件系统。
mount -l -t vfat
我们会在列表末尾的方括号中找到该标签。该软盘驱动器的标签为NORTUN。
我们可以通过/ mnt
挂载点访问软盘驱动器。
cd /mnt
ls
ls -l AMATCH.C
软盘包含C语言源代码文件。一个文件的日期戳显示该文件的最新修改时间为1992年10月。它可能比我们的很多读者还老。 (不用说NORTUN作为标签的含义在时间的迷雾中迷失了。)
如果通过grep命令重复执行df Piped以列出sd设备文件,我们将看到其中有两个。
df | grep /dev/sd
我们的软盘驱动器按预期显示为已挂载在/ dev / sdb
上。驱动器中软盘上的文件系统安装在/ mnt
处。
要卸载软盘,我们使用umount并将设备文件作为参数传递给它。
sudo umount /dev/sdb
umount懒惰选项
如果我们(或者另一个用户)在尝试卸载文件系统时正在使用它,会发生什么?卸载将失败。
sudo umount /dev/sdb
失败是因为用户的当前工作目录在他要卸载的文件系统中。 Linux足够聪明,不会让我们看不到所坐的分支。
为了克服这个问题,可以使用-l(惰性)选项。这导致umount
等待,直到能够安全地卸载文件系统。
sudo umount -l /dev/sdb
ls
cd ~
ls /mnt
即使发出了umount命令,文件系统仍会挂载,并且用户可以正常列出文件。
用户将目录更改到其主目录后,便会释放并卸载软盘文件系统。尝试在/ mnt
中列出文件不会产生任何结果。
挂载Samba共享
Samba是一组软件服务,允许在Linux和类Unix操作系统以及Windows操作系统之间互换访问网络共享。
设置Samba超出了本文的范围。但是,如果我们有权访问已提供给Samba共享,则可以通过这种方式将其安装在Linux中。
连接到与测试计算机相同网络的Raspberry Pi带有Samba共享。这是一个名为Backup的目录,已为Samba命名为share。让我们建立一个SSH连接并查看共享目录的内容。共享目录位于Pi上安装的USB记忆棒上。
用户名是" pi",Raspberry Pi的网络名称是" marineville.local"。
ssh [email protected]
ls /media/pi/USB64/Backup
exit
用户发出" SSH"命令,并被提示输入其Raspberry Pi密码。
他们提供密码并通过身份验证。终端窗口提示更改为pi @ marineville
,因为它已连接到Raspberry Pi。
它们在/ media / pi / USB64 / Backup
列出共享目录的内容。内容是两个目录,一个目录名为" dave",另一个目录名为" pat"。因此,现在我们知道挂载Samba共享时的期望了。
他们输入exit
断开与Raspberry Pi的连接,然后提示更改回dave @ theitroad
。
要使用Samba,必须安装cifs-utils
软件包。
如果我们使用Ubuntu或者其他基于Debian的发行版,请使用apt-get将软件包安装到系统上。在其他Linux发行版上,请改用Linux发行版程序包管理工具。
sudo apt-get install cifs-utils
安装完成后,使用如下命令安装共享,更改IP地址,共享名称和安装点(必须已经存在)以适合情况。
sudo mount -t cifs -o credentials=/etc/samba/creds,uid=1000,gid=1000 //192.168.4.13/share /media/dave/NAS
让我们分解该命令的各个部分。
-t cifs:文件系统类型为cifs。
-o凭据= / etc / samba / creds,uid = 1000,gid = 1000:选项参数是名为`creds'的文件的路径,该文件受保护并包含Raspberry Pi用户的用户名和密码;用户ID(UID)和组ID(GID),用于设置文件系统根目录的所有者和组。
//192.168.4.13/share:具有Samba共享的设备的网络位置,以及共享目录的Samba名称。共享的根目录是一个名为" Backup"的目录,但其Samba共享名称设置为" share"。
/ media / dave / NAS:挂载点的名称。我们必须提前创建安装点。
通过访问/ media / dave / NAS
上的挂载点,我们可以跨网络访问Raspberry Pi上的共享目录。我们可以在Raspberry Pi上看到两个名为" dave"和" pat"的文件夹。
cd /media/dave/NAS
创建和挂载文件系统
我们可以使用dd命令创建镜像文件,然后使用mkfs其中创建文件系统。然后可以挂载该文件系统。这是练习和试验" mount"的好方法。
我们使用" if"(输入文件)选项来告诉" dd"使用来自" / dev / zero"的零值流作为输入文件。
of(输出文件)是一个名为data_fs的新文件。
我们正在使用bs(块大小)选项来请求1 MB的块大小。
我们使用count
选项告诉dd
在输出文件中包含20个块。
dd if=/dev/zero of./data_fs bs=1M count=20
这样就为我们创建了图像文件。它只包含零值。
我们可以使用mkfs
命令在data_fs
文件中创建一个工作文件系统。 -t选项可以让我们选择文件系统的类型。我们正在创建一个ext4
系统。
mkfs -t ext4 ./data_fs
这就是拥有一个正常工作的文件系统所需要的。
让我们将其挂载到" / media / dave / data"上,然后使用" chown"设置所有者和组所有权以允许对其进行访问。
sudo mount ./data_fs /media/dave/data
sudo chown dave:users /media/dave/data
它行得通吗?让我们切换到新的文件系统并复制文件以查看。
cd /media/dave/data
cp /etc/fstab .
ls -l
我们能够将目录更改为新文件系统,并且成功复制了/ etc / fstab
文件。工作正常!
如果我们使用mount
列出已挂载的文件系统,但是使用-t
(type)选项将其输出限制为ext4
文件系统,我们将看到现在有两个已挂载的ext4
文件系统。
mount -t ext4
重新挂载文件系统
重新挂载文件系统使用-o remount选项。通常可以完成将文件系统从只读(测试)状态更改为读写(生产)状态的操作。
让我们再次安装软盘驱动器。这次,我们将使用-r(只读)标志。然后,我们将通过grep
传递mount
,并查看软盘文件系统的详细信息。
sudo mount -r /dev/sdb /mnt
mount | grep /mnt
如我们所见,突出显示的ro
表示文件系统是只读安装的。
通过将-o remount选项与rw(读写)标志一起使用,我们可以使用新设置来卸载和重新挂载文件系统,所有操作都在一个命令中。
sudo mount -o remount,rw /mnt
重复通过grep
装载mount
的管道,向我们显示ro
已被rw
代替(突出显示)。文件系统现在处于读写模式。
mount | grep /mnt
(不)移动文件系统
我们曾经能够卸载文件系统,然后使用单个命令将其重新安装到另一个安装点。
挂载中的-M(移动)选项专门用于允许我们执行此操作,但是在移至systemd
的Linux发行版中不再可用。那就是大多数大牌。
如果我们尝试将文件系统从/ mnt移至./data,它将失败并显示以下错误消息。尝试通过./data列出文件ystem中的文件不会返回任何结果。
sudo mount -M /mnt ./data
ls ./data
解决方法是使用前面使用的-B(bind)选项将原始安装点绑定到新的安装点。
sudo mount -B /mnt ./data
ls ./data