Linux mount/unmount命令(6/16)
linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着 linux系统的日渐成熟和稳定以及它开放源代码特有的优越性,linux在全世界得到了越来越广泛的应用。现在许多企业的计算机系统都是由UNIX系 统、Linux系统和Windows系统组成的混合系统,不同系统之间经常需要进行数据交换。下面我根据自己的实际工作经验介绍一下如何在linux系统 下挂接(mount)光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。
挂接命令(mount)
其中常用的参数有:
-a 安装在/etc/fstab文件中类出的所有文件系统。
-f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统。
-n 不把安装记录在/etc/mtab 文件中。
-r 讲文件系统安装为只读。
-v 详细显示安装信息。
-w 将文件系统安装为可写,为命令默认情况。 。
命令格式:
mount [-t vfstype] [-o options] device dir
其中:
1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
Mount Windows文件网络共享:smbfs
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统 UNIX(LINUX) 文件网络共享
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT/2000/XP的文件系统
auto 自动检测文件系统
2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
-o 指定挂载文件系统时的选项,有些也可写到在/etc/fstab中。常用的有:
defaults 使用所有选项的默认值(auto、nouser、rw、suid)
auto/noauto 允许/不允许以 –a选项进行安装
dev/nodev 对/不对文件系统上的特殊设备进行解释
exec/noexec 允许/不允许执行二进制代码
suid/nosuid 确认/不确认suid和sgid位
user /nouser 允许/不允许一般用户挂载
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
remount 重新安装已经安装了的文件系统
loop:用来把一个文件当成硬盘分区挂接上系统
iocharset:指定访问文件系统所用字符集
3.device 要挂接(mount)的设备。
4.dir设备在系统上的挂接点(mount point)。
挂接光盘镜像文件
由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟 光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远 远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
2、将文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
3、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。
挂接移动硬盘
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
/dev/sdc5 511 4864 34973473+ b Win95 FAT32
大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。
#mkdir -p /mnt/usbhd1
#mkdir -p /mnt/usbhd2
注:建立目录用来作挂接点(mount point)
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
挂接U盘
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
/dev/sda5 7905 8924 8193118+ 82 Linux swap
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
phys=(1000, 8, 32) logical=(888, 7, 31)
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
挂接Windows文件共享
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 www.samba.org网站下载......新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。
挂接UNIX系统NFS文件共享
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
1、Solaris系统NFS服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动nfs服务
# /etc/init.d/nfs.server start
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky和/export/home/sunky1是准备共享的目录
2、linux系统NFS服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止NFS服务
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start 启动NFS服务
/etc/rc.d/init.d/nfs stop 停止NFS服务
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。
3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
权限问题:
假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack 希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是
這樣寫的:
/home/jack *(rw,all_squash,anonuid=1818,anongid=1818)
這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這
目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是
1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等
2. client 端的 jack (uid,gid=1818) 我可以做:
rm -rf server_jack/*
cp something server_jack/
mkdir server_jack/a
需要注意的是,挂载点必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。使用多个-o参数的时候,-o 只用一次,参数之间用半角逗号隔开:
CODE:
# mount –o remount,rw /
例如要挂载windows下文件系统为FAT32的D盘,一般而言在Linux下这个分区对应/dev/hda5,根据具体的分区情况会有不同,这里就以hda5来举例说明:
CODE:
# mkdir /mnt/hda5 //创建hda5的目录作为挂载点,位置和目录名可自定义//
# mount -t vfat /dev/hda5 /mnt/hda5
一般而言,Linux会自动探测分区的文件系统,除非让你指定时,否则-t vfat 可以省掉。
CODE:
# mount /dev/hda5 /mnt/hda5
这样就可以进入/mnt/hda5目录去访问分区中的资源了。
3. 为什么mount上分区后显示不了中文文件为问号/乱码?
显示问号表明你的系统中没有可识别使用的中文字体,请先安装中文字体。确保你的系统已经可以很好的显示中文。显示为乱码一般是mount默认使用的文件系统编码和文件系统中文件的实际编码不一致造成的。要想正常显示中文文件,mount时需要用到 -o 参数里的codepage和iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。
CODE:
# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5
一般来说 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5 就可以解决问题了。
如果这样做了以后还有问题,请尝试UTF-8编码:
CODE:
# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5
4. 为什么mount上去以后分区普通用户不可写?
mount时加上 –o umask=000 即可:
CODE:
# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5
5. 为什么mount上去后的分区中的文件都变成短文件名了?
这是文件系统挂错的原因,将FAT32挂载成FAT16时就会出现这种情况,先umount,然后用 –t vfat 重新挂载即可解决问题。
CODE:
# mount –t vat /dev/hda5 /mnt/hda5
6. 为什么不能mount ntfs分区?
这是内核不支持NTFS文件系统的原因,请重新编译内核或者安装内核的NTFS文件系统支持包,以使得内核有NTFS文件系统的支持。
7. 如何挂载U盘和mp3?
如果计算机没有其它SCSI设备和usb外设的情况下,插入的U盘的设备路径是 /dev/sda1,用命令:
CODE:
# mkdir /mnt/u
# mount /dev/sda1 /mnt/u
挂载即可。
8. 可以直接使用iso文件吗?
可以,就是mount的这一选项使得Linux下有免费虚拟光驱的说法,具体用法是:
CODE:
# mkdir /mnt/iso
# mount –o loop linux.iso /mnt/iso
当然,挂载以后挂载点/mnt/iso也是只读的。
9. 我怎么不可以mount iso文件?
一般而言,大多数的发行版使用的内核均已将loop设备的支持编译进去了,但是也有没有的情况,所以请确保系统所使用的内核支持loop设备。
第二种情况是iso文件被放置到了NTFS或其它只读文件系统中了。挂载loop 设备必须要求挂载到一个可写的分区中,目前Linux内核对NTFS文件系统的写支持非常有限,请将iso文件复制到其它可写文件系统中后再挂载。
10. 如何挂载光驱和软驱
一般来说CDROM的设备文件是/dev/hdc,软驱的设备名是/dev/fd0
CODE:
# mkdir /mnt/cdrom
# mount /dev/hdc /mnt/cdrom //挂载光驱 //
# mkdir /mnt/floppy
# mount /dev/fd0 /mnt/floppy //挂载软驱 //
11. 为何挂载的CD-ROM不能显示中文文件?
使用 –o iocharset=cp936 选项一般能解决问题,否则使用utf-8编码。
CODE:
# mount –o iocharset=cp936 /dev/hdc /mnt/cdrom
12. 如何开机自动挂载分区?
每次挂载都要输入那么长的命令的确是繁琐了些,只要将分区信息写到/etc/fstab文件中即可实现系统启动的自动挂载,例如对于/dev/hda5的自动挂载添加如下的行即可:
CODE:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0
13. 如何挂载samba 分区?
CODE:
# mkdir /mnt/share
# mount -t smbfs -o username=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share
如果中文显示不正常请尝试UTF-8编码。当然可以写到fstab中实现自动挂载。
14. mount --bind是什么意思?
mount --bind 是将一个目录中的内容挂载到另一个目录上,用法是
CODE:
# mount --bind olddir newdir
这个命令使得自己搭建的FTP要共享某个目录的时候变得特别方便。如果要取消mount用命令:
CODE:
# mount --move olddir newdir 即可。
如果mount --bind 也想写入fstab中的话格式如下:
CODE:
olddir newdir none bind 0 0
15. umount基本用法是?
譬如 /dev/hda5 已经挂载在/mnt/hda5上,用一下三条命令均可卸载挂载的文件系统
CODE:
# umount /dev/hda5
# umount /mnt/hda5
# umount /dev/hda5 /mnt/hda5
16. 为什么umount的时候老显示 device busy?
这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用:
CODE:
# umount -l /mnt/hda5
来卸载设备。选项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令 ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。
方法一:
fuser -m -v /nfs_old/
用户 进程号 权限 命令
/nfs_old/: root 2699 ..c.. bash
root 2999 ..c.. su
如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。
kill -9 2699 2999
umount /nfs_old/
方法二:
umount -l /nfs_old/
方法三:
fuser -km /nfs_old/