挂载存储媒体

挂载存储媒体


 Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载( mounting)。在今天的图形化桌面环境里,大多数Linux发行版都能自动挂载特定类型的可移动存储媒体。可移动存储媒体指的是可从PC上轻易移除的媒体,比如CD-ROM、软盘和U盘。如果用的发行版不支持自动挂载和卸载可移动存储媒体,就必须手动完成。本节将介绍一些可以帮你管理可移动存储设备的Linux命令行命令。


1. mount命令


Linux上用来挂载媒体的命令叫作mount。默认情况下, mount命令会输出当前系统上挂载的设备列表。


$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /media/disk type vfat
(rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=503)
$


mount命令提供如下四部分信息


 媒体的设备文件名
 媒体挂载到虚拟目录的挂载点
 文件系统类型
 已挂载媒体的访问状态


上面例子的最后一行输出中, U盘被GNOME桌面自动挂载到了挂载点/media/disk。 vfat文件系统类型说明它是在Windows机器上被格式化的。要手动在虚拟目录中挂载设备,需要以root用户身份登录,或是以root用户身份运行sudo命令。下面是手动挂载媒体设备的基本命令:
mount -t type device directory
type参数指定了磁盘被格式化的文件系统类型。 Linux可以识别非常多的文件系统类型。如果是和Windows PC共用这些存储设备,通常得使用下列文件系统类型。
 vfat: Windows长文件系统。
 ntfs: Windows NT、 XP、 Vista以及Windows 7中广泛使用的高级文件系统。
 iso9660:标准CD-ROM文件系统。


大多数U盘和软盘会被格式化成vfat文件系统。而数据CD则必须使用iso9660文件系统类型。后面两个参数定义了该存储设备的设备文件的位置以及挂载点在虚拟目录中的位置。比如说,手动将U盘/dev/sdb1挂载到/media/disk,可用下面的命令:


mount -t vfat /dev/sdb1 /media/disk


媒体设备挂载到了虚拟目录后, root用户就有了对该设备的所有访问权限,而其他用户的访问则会被限制。你可以通过目录权限(将在第7章中介绍)指定用户对设备的访问权限。如果要用到mount命令的一些高级功能,表4-5中列出了可用的参数。
表4-5 mount命令的参数
参 数 描 述

-a
-f
-F
-v
-I
-l
挂载/etc/fstab文件中指定的所有文件系统
使mount命令模拟挂载设备,但并不真的挂载
和-a参数一起使用时,会同时挂载所有文件系统
详细模式,将会说明挂载设备的每一步
不启用任何/sbin/mount.filesystem下的文件系统帮助文件
给ext2、 ext3或XFS文件系统自动添加文件系统标签

 

-n
-p num
-s
-r
-w
-L label
-U uuid
-O
-o

挂载设备,但不注册到/etc/mtab已挂载设备文件中
进行加密挂载时,从文件描述符num中获得密码短语
忽略该文件系统不支持的挂载选项
将设备挂载为只读的
将设备挂载为可读写的(默认参数)
将设备按指定的label挂载
将设备按指定的uuid挂载
和-a参数一起使用,限制命令只作用到特定的一组文件系统上
给文件系统添加特定的选项

-o参数允许在挂载文件系统时添加一些以逗号分隔的额外选项。以下为常用的选项。
 ro:以只读形式挂载。
 rw:以读写形式挂载。
 user:允许普通用户挂载文件系统。
 check=none:挂载文件系统时不进行完整性校验。
 loop:挂载一个文件。


2. umount命令


从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。窍门 Linux上不能直接弹出已挂载的CD。如果你在从光驱中移除CD时遇到麻烦,通常是因为该CD还挂载在虚拟目录里。先卸载它,然后再去尝试弹出。卸载设备的命令是umount(是的,你没看错,命令名中并没有字母n,这一点有时候很让人困惑)。 umount命令的格式非常简单:


umount [directory | device ]


umount命令支持通过设备文件或者是挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它:


[root@testbox mnt]# umount /home/rich/mnt
umount: /home/rich/mnt: device is busy
umount: /home/rich/mnt: device is busy
[root@testbox mnt]# cd /home/rich
[root@testbox rich]# umount /home/rich/mnt
[root@testbox rich]# ls -l mnt
total 0
[root@testbox rich]#


上例中,命令行提示符仍然在挂载设备的文件系统目录中,所以umount命令无法卸载该镜像文件。一旦命令提示符移出该镜像文件的文件系统, umount命令就能卸载该镜像文件。 ①4.2.2 使用 df 命令
有时你需要知道在某个设备上还有多少磁盘空间。 df命令可以让你很方便地查看所有已挂载磁盘的使用情况。


$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 18251068 7703964 9605024 45% /
/dev/sda1 101086 18680 77187 20% /boot
tmpfs 119536 0 119536 0% /dev/shm
/dev/sdb1 127462 113892 13570 90% /media/disk
$


df命令会显示每个有数据的已挂载文件系统。如你在前例中看到的,有些已挂载设备仅限系统内部使用。命令输出如下:
 设备的设备文件位置;
 能容纳多少个1024字节大小的块;
 已用了多少个1024字节大小的块;
 还有多少个1024字节大小的块可用;
 已用空间所占的比例;
 设备挂载到了哪个挂载点上。


df命令有一些命令行参数可用,但基本上不会用到。一个常用的参数是-h。它会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节。

 

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb2 18G 7.4G 9.2G 45% /
/dev/sda1 99M 19M 76M 20% /boot
tmpfs 117M 0 117M 0% /dev/shm
/dev/sdb1 125M 112M 14M 90% /media/disk
$


说明 Linux系统后台一直有进程来处理文件或使用文件。df命令的输出值显示的是Linux系统认为的当前值。有可能系统上有运行的进程已经创建或删除了某个文件,但尚未释放文件。这个值是不会算进闲置空间的。

注:如果在卸载设备时,系统提示设备繁忙,无法卸载设备,通常是有进程还在访问该设备或使用该设备上的文件。这时可用lsof命令获得使用它的进程信息,然后在应用中停止使用该设备或停止该进程。 lsof命令的用法很简单:

lsof /path/to/device/node,或者lsof /path/to/mount/point。


使用 du 命令通过df命令很容易发现哪个磁盘的存储空间快没了。系统管理员面临的下一个问题是,发生这种情况时要怎么办。另一个有用的命令是du命令。 du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可用来快速判断系统上某个目录下是不是有超大文件。默认情况下, du命令会显示当前目录下所有的文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间。对标准大小的目录来说,这个输出会是一个比较长的列表。下面是du命令的部分输出:


$ du
484 ./.gstreamer-0.10
8 ./Templates
8 ./Download
8 ./.ccache/7/0
24 ./.ccache/7
368 ./.ccache/a/d
384 ./.ccache/a
424 ./.ccache
8 ./Public
8 ./.gphpedit/plugins
32 ./.gphpedit
72 ./.gconfd
128 ./.nautilus/metafiles
384 ./.nautilus
72 ./.bittorrent/data/metainfo
20 ./.bittorrent/data/resume
144 ./.bittorrent/data
152 ./.bittorrent
8 ./Videos
8 ./Music
16 ./.config/gtk-2.0
40 ./.config
8 ./Documents


每行输出左边的数值是每个文件或目录占用的磁盘块数。注意,这个列表是从目录层级的最底部开始,然后按文件、子目录、目录逐级向上。这么用du命令(不加参数,用默认参数)作用并不大。我们更想知道每个文件和目录占用了多大的磁盘空间,但如果还得逐页查找的话就没什么意义了。下面是能让du命令用起来更方便的几个命令行参数。


 -c:显示所有已列出文件总的大小。
 -h:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字
节。
 -s:显示每个输出参数的总计。



 

上一篇:docker 原理之 mount namespace(下)


下一篇:linux开启telnet服务