1 基本常识
一个硬盘能够被分成一个或多个被称作分区的逻辑磁盘。这些分区信息保存在磁盘的0扇区内。设备分区通常如下所示:
/dev/hda
/dev/hdb
/dev/sda
/dev/sdb
/dev/hd[a-h] 是IDE类型的磁盘 /dev/sd[a-p] 是SCSI 类型的, /dev/ed[a-d] 是ESDI类型的, /dev/xd[ab] 是 XT 类型的磁盘。 每个设备名指向整个磁盘。分区是在设备名后面加一个分区号,例如: /dev/hda1 是系统中第一个IDE硬盘的第一个分区。
分区分为: primary(主分区), extended(扩展分区), logical(逻辑分区)几种类型. 扩展分区和逻辑分区只对msdos 和dvh分区表有效。
fs-type文件系统:ext2, fat16, fat32, hfs, hfs+, hfsx, linux-swap, NTFS, reiserfs, ufs
注意:千万不要在第0个cylinder的第一个扇区(sector)来开始一个分区,否则将毁坏磁盘标签(disklabel)。内核和磁盘硬件都可能缓存数据。
fsck: 检查并修复linux文件系统
/etc/fstab: 定义了系统挂载了哪些文件系统
fdisk: 创建和管理分区表的一个菜单驱动的程序。
mkfs: 格式化分区
LINUX中每块磁盘也是最多只能分为4个主分区。
因为扩展分区是不能用,我们还要将扩展分区划分成逻辑分区。
Df –t 查看磁盘分区格式
2 磁盘管理
2.1 增加swap交换区
Swap file ( 建立虚拟内存文件);
1. 以 dd 指令来建立 swapfile ;// dd if=/dev/zero of=/tmp/swap bs=4k count=16382
2. 以 mkswap 来将 swapfile 格式化为 swap 的文件格式;
3. 以 swapon 来启动该文件,使成为 swap ;
4. 以 swapoff 来关闭该文件!
2.2 磁盘修复fsck
磁盘修复前,必须将磁盘umount
umount /dev/hda3
fsck /dev/hda3
警告:绝对不要在任何已挂载的档案系统上执行 e2fsck/fsck。假如我们想要去执行 fsck,我
们应该卸下档案系统后再去执行 fsck(亦即需要 umount 该扇区啰)。如果不这样做,可
能会让档案系统毁损。
2.3 文件的挂载点
该文件中配置了系统中所有文件的挂载点
/etc/fstab
2.4 新增一个partition
试说明新增一个 partition 在 /dev/hdb 当中,且为 hdb5时,并挂载上/disk2
fdisk /dev/hdb 按 n 新增,按 e 新增 extended ,再按 n 新增 logical
mke2fs –b 2048 /dev/hdb5
mkdir /disk2
mount –t ext2 /dev/hdb5 /disk2
2.5 新增虚拟内存swap
如何新增加 64MB 的虚拟内存 swap
dd if=/dev/zero of=/tmp/swap bs=4k count=16384
mkswap /tmp/swap
swapon /tmp/swap
2.6 自动挂在扇区
如果要设定一个新挂载上的扇区,令他可以在开机的时候被挂载上
先 /etc/fstab 再 mount –a
2.7 Usb设备
2.7.1 获取usb设备信息
Lsusb
2.7.2 Usb设备的挂载
1. 查看硬盘
fdisk -l
只有当没有其它系统对服务器建立磁盘映射的时候才能看到移动硬盘
2. mout硬盘
fat格式:mount -t vfat /dev/sda6 /home/jya/usb (usb是想要mount到的目录)或
mount –t msdos /dev/sda6 /home/jya/usb
nfs格式:mount -t ntfs -f -w /dev/sda6 usb2
3. unmout硬盘
umount usb
2.8 获取硬盘品牌及相关信息
smartctl -i /dev/sda
说明: smartctl是用来控制和监视 smart disk的程序 -i 参数用来显示设备的相关信息
2.9 光盘的制作与挂载
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)
建立一个目录用来作挂接点(mount point): #mkdir /mnt/vcdrom
挂载光盘: #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。
2.10 挂载Windows文件系统
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到www.samba.org网站下载samba软件包,现在最新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
1. 建立一个目录用来作挂接点(mount point): # mkdir –p /mnt/samba
2. 挂载windows文件系统
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
mount -t smbfs -o username=administrator,password=123 //10.42.66.168/tmp mnt
suse11需要将文件类型改成 -t cifs
注意: administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享。
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。
3 新磁盘分区、格式化
Linux下磁盘与windows一样,只有先分区再格式化后才能使用。
当新增一块磁盘时,通过fdisk –l 命令将显示该磁盘没有有效的分区表: “Disk /dev/sdb doesn't contain a valid partition table”。
3.1 磁盘分区
磁盘分区操作的信息先被保存在内存当中,只有当调用“w”操作后,分区操作才生效。
1. 用fdisk -l 来看看我们的硬盘情况
2. 执行 fdisk /dev/sdb 进入磁盘分区的菜单模式
3. 在Command (m for help): 输入m m(帮助)获取帮助信息
4. 输入 n 来建立一个分区, 将出现如下提示:
Command action
e extended
p primary partition (1-4)
选P的话是说明建立主分区,只能建立4个主分区 选e 说明建立扩展分区。
5. 输入 P, 出现:
Partition number (1-4):
这步让我们来添加分区的编号, 即sdb后面跟的数字编号。我们在这里输入1即可。
注意: 同一块磁盘中,不管是主分区还是扩展分区或者逻辑分区,编号不能有重复。
6.
Partition number (1-4):1 按回车出现
First cylinder (1-1024, default 1):
这步是说明磁盘有1024个柱面,当前分区从哪个柱面开始, 按回车默认即可。
出现Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044):
让我们在1-1024个柱面上来选择本分区的最后一个柱面的标号来确定分区的大小。在这里既可以输入本分区最后一个柱面的标号, 还可以直接输入本分区的大小,如:+1024m
7. 新建一个扩展分区: 输入N,选择e(扩展分区), 把剩下的硬盘空间给扩展分区。
8. 将扩展分区划分成若干逻辑分区。输入N,选择l(逻辑分区)。
9. 输入P 来看看分区的情况标题
10. 接着对文件系统做分区的编号,输入 t 来转化分区的编号。选择分区(2), 出现:
Hex code (type L to list codes):
输入L 来看看什么编号对着什么样的文件系统类型:
82 Linux swap 83 Linux c W95 FAT32 (LBA)
输入相应的编码。
11. 输入 w ,写入刚才对硬盘做分区的操作。
12. 输入d 是删除一个分区
出现Partition number (1-5):
在这里我们可以输入想要删除的分区的区号
3.2 磁盘格式化
mkfs [-t msdos] /dev/sdb5
该操作将调用相应的mkfs.*执行磁盘格式化, 默认是ext2类型。
或者直接调用mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.ntfs 等命令对磁盘进行相应的格式化。
3.3 磁盘格式调整: tune2fs
tune2fs -j /dev/sdb1
-j 是把/dev/sdb1从ext2转换成ext3文件系统
注意:ext3不能转换成ext2文件系统。
4 设备挂载 mount
挂载点必须是一个目录。 一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。 对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
4.1 手动挂载
4.1.1 挂载时使用mount命令
格式:mount [-参数] [设备名称] [挂载点]
其中常用的参数有
-a 挂载fstab文件中定义的文件系统。
-t<文件系统类型> 指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备
提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在,说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。
例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
现在就可以进入/mnt/winc等目录读写这些文件系统了。
要保证最后两行的命令不出错,要确保软驱和光驱里有盘。
如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。
当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。
在实际中操作中,直接加挂一个windows的分区,中文的文件名和目录名会出现乱码,为了避免这种情况可以指定字符集,命令如下:
mount /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936
mount -t vfat /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936
注意:cp936是指简体中文,cp950是指繁体中文。
4.2 自动挂载
方法1: 把加挂的命令放在/etc/rc.d/rc.local中。
方法2: 修改分区配置文件/etc/fstab,在启动时加挂文件系统
文件/etc/fstab和 /etc/mtab存放的是系统中的文件系统信息,存放了与分区有关的重要信息,其中每一行为一个分区记录,每一行又可分为六个部份,每个部分都有空格或tab键分开。文件中以*开头的行是注释信息。Fstab文件中的纪录的排序十分重要。因为fsck,mount或umount等程序在做它们的工作时会按此顺序进行。
当正确的设置了该文件,则可以通过"mount /directoryname"命令来加载一个文件系统,/directoryname应该是fstab或mtab文件中定义的挂载点。同时fsck、 mount、umount的等命令都利用该程序。
4.2.1 Fstab文件中参数说明
在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔,第五项是提供DUMP功能,第六项是设定此filesystem是否要在开机时做check的动作。
下面以/dev/hda7 / ext2 defaults 1 1为例逐个说明:
1. 第一项定义了希望加载的文件系统所在的设备或远程文件系统
它通常指定要mount的储存装置的实体位置,如hdb或如上例的/dev/hda7。
对于通常的mount操作而言,这个字段应该包括一个将被装载的块设备的设备结点(通过mknod 命令来创建)或指向这类结点的连接(例如/dev/cdrom或/dev/sdb),对于一般的本地块设备情况来说:IDE设备一般描述为 /dev/hdaXN,X是IDE 设备通道(应该是主分区)(a, b,或c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:,例如: `knuth.aeb.nl:/', 这个字段应该包含host:dir格式的信息, host可以为ip地址,也可以为机器名。对于procfs,使用`proc'来定义。 对文件系统的定义(fs spec),
除了显示的使用设备名,你可以使用设备的UUID或设备的卷标签,例如,你可以在这个字段写成“LABAL=root”或“UUID=3e6be9de -8139-11d1-9106-a43f08d823a6”,这将使系统更具伸缩性。例如,如果你的系统添加或移除了一个SCSI硬盘,这有可以改变你的设备名,但它不会修改你的卷标签。
2. 第二项就是您想要将其加入至哪个目录位置,如/home或如上例的/, 这其实就是在安装时提示的挂入点。
对于交换分区(swap),这个字段定义为none,如果在载入点的路径中包含空格符,可以用“/040”来替代空格符。
3. 第三项就是所谓的local filesystem,其包含了以下格式:如 ext、ext2、msdos、iso9660、nfs、swap等,或如上例的ext2,可以参见/proc/filesystems说明。
常见的文件类型为ext2(Linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、iso9600等.文件系统类型(fs vfstype),主要用来定义文件系统的类型。Linux系统支持大量的文件类型,包括sdfs,affs,autofs,jfs,minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, reiserfs, romfs,,smbfs, sysv, tmpfs, udf, ufs, umsdos, vfat, xenix, xfs等等。如果想了解你的kernel目前支持哪些文件系统,可以查看/proc/filesystems的内容。如果这个字段定义为swap,这条纪录将关联到一个用
于交换目的的文件或分区。如果这个字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。.
Windows:
vfat = FAT 32, FAT 16
ntfs= NTFS
CD/DVD/iso: iso9660
Network file systems:
nfs: server:/shared_directory /mnt/nfs nfs <options> 0 0
smb: //win_box/shared_folder /mnt/samba smbfs rw,credentials=/home/user_name/winbox-credentials.txt 0 0
auto: The file system type (ext3, iso9660, etc) it detected automatically.
4. 第四项指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。
这些选项列表包括了装载类型以及对于该文件系统合适的其它装载选项。对于非 NFS系统可用的装载选项可以参看mount命令的说明,对于nfs系统的选项可以查看关于nfs的文档。对于所有文件系统都适用的选项有noauto (当使用mount –a命令时不载入),user(允许用户进行装载),owner(允许设备所有人装载),_netdev(设备需要网络),后两个选项是linux系统所特有的。
该选项定义了挂载时所要设定的状态,如ro(只读)或如上例的defaults(包括了其它参 数如rw、suid、exec、auto、nouser、async),更多信息可以参见「mount nfs」。
其他常见的选项包括:
Ro: 以只读模式加载该文件系统
Sync: 不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度
User: 允许普通用户加载该文件系统
Quota:强制在该文件系统上进行磁盘定额限制
Noauto: 不再使用mount -a命令(例如系统启动时)加载该文件系统
5. 第五项是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,0为忽略,1为备份, 其内定值是0。
该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0.文件系统频率(fs_freq),被dump程序使用来确定哪个文件系统需要dump,如果最后一个字段没有设置,系统将认为其值为0,而dump程序则认为此文件系统无需dump。
6. 第六项是设定此filesystem是否要在开机时做check的动作,0为忽略。除了root的filesystem其必要的 check为1之外,其它皆可视需要设定,内定值是0。
该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0.在同一个物理硬盘内的文件系统应该被顺序检测,而不同硬盘中的文件系统则应该同时检测以充分利用系统的并行性。如果最后一个字段值为0或没有设置,fsck程序装跳过此文件系统的检测。在linux编程中可以用getmntent过程来访问这个文件的内容。
4.2.2 自动挂载中文Windows分区
修改/etc/fstab实现自动挂载Windows分区,并显示中文目录
在/etc/fstab文件中添加如下内容:
/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0
4.3 安全挂载
mount /dev/sdb1 /mnt/d1 -o ro
挂载后往d1里是写不了数据的
mount /dev/sdb1 /mnt/d1 -o noexec
挂载后不能使用可执行文件
mount /dev/sdb1 /mnt/d1 -o nodev
nodev是不许辨认设备文件。在移动设备和软盘里我们大家要是禁用这个设备 ,如果软盘里放着dev 那么普通用户可以通过软盘里的dev来访问实际的硬盘。
mount /dev/sdb1 /mnt/d1 -o nosuid,nosgid
SUID SGID 默认是开启的 可执行文件和可执行程序。这样的程序是危险的。执行者可以通过这获得程序的身份和权限。通常明感的目录和公用的目录要使用nosuid,nosgid
mount /dev/sdb1 /mnt/d1 -o noatime
默认是更新节点的访问时间的。这样每访问一次就要更新一次,浪费资源。
我们用noatime 来节省资源。
mount /dev/sdb1 /mnt/d1 -o nouser
不许普通用户挂载磁盘。但是上面这句话不能这么写。在这面只是方便给大家看
这nouser只能写进 /etc/fstab 里。
vi /etc/fstab
/dev/sdb1 /mnt/d1 ext3 defaults 0 0
要把defaults 去掉 添加上 noexec,nodev,nosuid,nosgid, 如:
/dev/sdb1 /mnt/d1 ext3 noexec,nodev,nosuid,nosgid 0 0
当然这要看所挂载的要求是什么, 在这面的填写不是固定的,这只是演示。一定要添对,不然会挂载不上的。
4.4 Windows NTFS分区的挂载
为了快速挂载Windows NTFS分区,最好的办法是升级linux内核或安装用户态组件(ntfsmount)。Ntfsmount由fuse和ntfsprogs两个工程组成。我们先运行“ uname –r ”命令查询内核版本,然后到http://www.linux-ntfs.org/doku.php 或http://sourceforge.net/projects/linux-ntfs/ 网站下载ntfsprogs相应的版本,到http://fuse.sourceforge.net/下载fuse。先安装fuse, 再安装ntfsprogs。
4.4.1 Ntfsmount的安装
4.4.1.1 Fuse的安装
./configure
make
make install
modprobe fuse // 检查安装是否成功
4.4.1.2 ntfsprogs的安装
./configure --enable-fuse-module
make
make install
4.4.2 NTFS磁盘挂载
4.4.2.1 临时挂载
mkdir /mnt/winlarge
ntfsmount /dev/sdaX /mnt/winlarge
4.4.2.2 使用fstab开机自启动挂载
vim /etc/fstab
添加类似下面的内容:
/dev/sdaX /mnt/winlarge fuse.ntfs locale=en_US.utf8 0 0
具体的含义, fuse.ntfs指引入 fuse对ntfs的支持,
4.5 挂载ISO文件
mount -t iso9660 -o loop suse/SLES-9-SP-3-i386-GM-CD1.iso mnt
4.6 挂载Linux系统通过samba共享出来的目录
利用samba共享出来的目录其实很难说其原来是哪种文件系统,不过这一点不重要,只要它对用户是透明的就好啦。加挂时,我们指定类型为smbfs,在加挂samba共享的分区时,也会出现中文的文件名和目录名乱码情况,可以用以下命令加挂:
mount -t smbfs -o username=terry,password=terry,codepage=936,iocharset=cp936
//terry-linux/terry /mp3/
mount -t smbfs -o
username=terry,password=terry,codepage=936,iocharset=cp936 //192.168.100.228/terry /mp3/
注意:你可以不直接写password=terry这个参数,系统界时会要你输入密码,这样就可以防止有人直接看到你的密码。视具体情况而定,-o后面的参数可以对应增减。
4.7 加挂Window系统共享出来的目录
在局域网中,常常需要去访问其它Windows系统共享出来的目录,在Linux下,安装了samba后就可以使用samba中带的命令来访问Windows机器的共享资源。
用smbclient来列出Windows机器的共享资源
smbclient -L 192.168.100.111
smbclient -L //IP -U 用户名%密码
根据上面所列出Windows的共享资源后,可以选择需要加挂到本地Linux中去的Windows的共享资源,然后使用smbmount或mount来加挂,请参照下面几条命令:
smbmount //192.168.100.111/public /public/
mount //192.168.100.111/d /mnt/cdrom -o username=terry (这样要在命令行输入密码的)
mount //192.168.100.111/d /mnt/cdrom -o username=terry$1234 (这样则不必在命令行输入密码)
应该将smbfs更改为mount -t cifs -o username=leon,password=xxxx //192.168.1.5/G /mnt/samba
5 磁盘分区大小调整 parted
Parted是一个用于对分区及其文件系统进行建立、修改、调整、检查、复制等操作的一个工具。此外,你还可以用它来检查磁盘的使用状况,在不同的磁盘之间复制数据,甚至是“映象”磁盘——将一个磁盘的安装 完好地复制到另一个磁盘中。