现在的位置: 首页 > 综合 > 正文

5、管理磁盘文件系统

2018年02月05日 ⁄ 综合 ⁄ 共 10185字 ⁄ 字号 评论关闭

前次学习需要掌握的命令:

pwd
ls
useradd
passwd
exit
su
whoami
df
du
fdisk
hdparm
ping
more
ifconfig
netconfig
service
route
neat(neat-tui)
locale
LANG
chkconfig
setup
runlevel
ntsysv

达到目标:

- 使用外部存储设备(软盘,硬盘,光盘,u盘等)

- linux中的分区与格式化

- linux文件系统的维护:ext2/ext3文件系统的高级特性;文件系统地检查;磁盘配额;自动挂载工具automounter

- 登录管理工具putty的使用

1、putty登录工具

运行putty

在host name处填上linux服务器的IP地址,port(端口)默认为22,使用ssh协议,可以将配置保存,点击saved sessions,下次直接点击保存的配置就直接进入Linux登录界面。

可以修改登录session的配置使用中文环境。

显示中文日期:

2、使用外部存储设备

- windows中对外部存储设备的辨认是自动化的,比如A:盘、B:盘是软盘驱动器,硬盘分区和光盘驱动器都有相应的编号,如C:、D:等,光盘是用硬盘分区编号后的第一个字母表示,这些统称为盘符,不管软驱或光驱中是否有盘,这些设备都存在。这种对设备和分区的管理不灵活,软盘永远是A盘或B盘,光盘在系统安装完后基本也就确定不变了,如果分区很多的话,计算机上会显示很多盘符,分区也多,现实的磁盘越多,打开的速度就越慢。

- Linux中的外部设备都有相应的设备文件名,不能直接使用,需要挂载。比如:
# mount  /dev/fd0  /mnt/floppy

linux中不会出现windows的情况,因为设备是跟目录关联起来的,只要不访问那个目录,磁盘就不会被读取读取速度会大大加快。挂载外部存储设备示意图:

linux必须将设备挂载到一个目录下,相当于与目录关联起来,如下图:

上图,硬盘(第一块IDE硬盘的第一个分区)挂载在根目录/下,boot/、usr/、mnt/、home/、var/目录都是根目录下的子目录,都保存在硬盘上,mnt/下的floppy/和cdrom/目录,如果没有挂载设备,也是一个独立的目录,其下的内容也将保存在硬盘,已过挂载了设备,如上图,挂载了软盘和光盘,其下的内容就是软盘和光盘里的内容,而且,对于floppy/目录其大小只有1.4M,而如果没有挂载,它的可用大小理论上是硬盘上的可用空间。

/mnt目录是用来挂载设备的目录,这是一种应用上的默认规则,你当然也可以将设备挂于任何其他目录下。floppy和cdrom目录是系统安装时自动创建的,也是一种使用约定。

3、挂载外部存储设备

挂载的命令:mount    设备名   挂载点
例如:mount /dev/fd0 /mnt/floppy

挂载点就是一个目录,这个目录必须事先存在

linux中常用的外部设备文件名:
软盘   ------------------------------   /dev/fdN       (N=0,1,...)
光驱(IDE)  -------------------    /dev/cdrom (->/dev/hdX)
光驱(SCSI)------------------    /dev/scdN  (N=0,1,...)
硬盘(IDE)  ------------------     /dev/hdX   (X=a,b,c,...)
硬盘(SCSI)-----------------      /dev/sdX   (X=a,b,c,...)
U盘/移动硬盘  ----------------      /dev/sdX   (X=a,b,c,...)

这里要注意的是U盘/移动硬盘,使用的USB接口,这种设备内部使用了内置的USB——SCSI的转换器,所以设备名是sdX,与SCSI设备相同。

硬盘必须要分区才能使用的,也就是只用分区才能挂载。

一般使用的过程:

(1)、挂载外设
(2)、读写挂载点
(3)、卸载设备
(4)、移走外部存储设备

这里要注意,进行(4)步前一定要执行第(3)步卸载设备,否则会对设备造成损伤,尤其是软盘。

- 挂载光盘

对于虚拟机,光盘我们先使用物理光驱:

使用挂载命令进行挂载

查看cdrom这个设备文件:

可以看到,cdrom是/dev/hdb的符号链接,我们可以直接挂载/dev/hdb这个设备。修改光驱如下:

可以看到,光驱从物理光驱修改为使用iso文件时,自动默认为IDE光驱,查询/dev/cdrom,其依然是指向/devhdb的链接,所以挂载/dev/cdrom同挂载/dev/hdb是一样的。

可以看一下/dev目录下的设备文件

可以看到有一个cdrom设备文件,还有一个cdrom-hdb,还有一个dvd和dvd-hdb,查看这些设备文件的情况

可以看出,这四个文件都是指向hdb,所以加载任何一个效果都是一样的。

现在我们增加一个光驱。

默认添加的光驱是SCSI型光驱,光驱类型的修改需要在停止系统运行的情况下,在设置中通过高级选项进行调整。

在系统运行中增加光驱后,怎样能实时激活呢,使用service kudzu start 好像也不能刷新设备,重新启动系统,查看/dev,

可以看到多出很多关于光驱的设备文件

两个实在的设备文件是hdb和scd0,其他的都是指向这两个设备的链接。进行挂载实验

挂载的结果,效果都一样。继续增加光驱:

cdrom默认链接的是SCSI光驱。

  - 挂载硬盘

硬盘是特殊的块设备,必须经过分区后才能使用

假设我们已经有了一块经过分区的scsi硬盘,在系统中的设备名是sda,只有一个分区,要挂载在/mnt/d1目录下,则挂载就是:
mount  /dev/sda1  /mnt/d1

跟光驱的挂载基本相同,只要设备分区名称没写错,挂载目录正确就可以了。

  - 挂载U盘

U盘是USB设备,内置USB-SCSI转换接口,所以被认为是SCSI硬盘,默认都划分分了一个分区,使用方法:
mount /dev/sdb1 /mnt/u

需要事先驱动(内核要支持SCSI和USB接口)
modprobe usb-storage

在插入u盘后,屏幕显示:

这里U盘被识别为sda,所以挂载:mount /dev/sda1 /mnt/u

  - 挂载软盘

使用虚拟机,制作软盘镜像,但是在挂载的时候提示出现错误,不能挂载。

不知道什么原因

- 文件系统类型

文件系统类型选项:mount -t <文件系统类型> 设备  挂载点

挂载windows FAT32格式的介质
mount -t vfat /dev/hda2  /mnt/c
mount -t vfat /dev/fd0 /mnt/floppy

Windows NTFS格式的介质默认的内核不能辨认,需要重新编译内核
mount -t ntfs /dev/hda3  /mnt/d

数据光盘格式:iso9660,udf
mount -t iso9660 /dev/cdrom  /mnt/cdrom

挂载双启动系统的winxp分区:

- 挂载选项

选项用来调整对介质的访问效果

mount -o <选项> 设备 挂载点

不同的文件系统类型具有不同的选项,可以参看:man mount

windows分区的常用挂载选项
iocharset=<charset>    (设置文件系统的字符编码常用值为gb2312和utf8)

mount -t vfat -o iocharset=gb2312  /dev/hda3  /mnt/d

mount -t vfat -o utf8 /dev/hda3  /mnt/d

常用移动介质挂载选项

- rw/ro   —— 说明:读写/只读模式,适用于所有类型,例如:mount /dev/fd0 /mnt/floppy -o ro
- uid=<user name/uid>,gid=<group name/gid>  ——说明:为挂载点目录指定属主和组身份,如果不使用这个选项,默认属主和组是当期运行命令的用户和组,例如:
    mount /dev/sdb2 /d -o uid=redhat,gid=redhat
- umask=<权限掩码>  ——说明:设置挂载点目录的文件权限掩码,例如:mount -o uid=redhat,umask=0077 /dev/sdb2  /d

文件系统的维护

- ext2/ext3文件系统的优化与高级特性

- 磁盘检查

- 磁盘配额

-自动挂载分区

优化ext2/ext3文件系统:

所谓磁盘是块设备,就是说磁盘的分区在使用时逻辑上是划分为很多个块,如上图,一个块的大小可以由我们自己来指定,一般块的大小有1024,2048和4096,单位是字节,系统在使用时,是按照块来分配的,例如,一个文件保存了3个字符,它的实际大小就是3字节,但是在保存到磁盘时因为是按照块来分配使用的,所以就分配了一块,这样的话,对于小文件,使用大块的系统,其使用率就会很低,浪费很大,而对于大文件来说,因为其要占用很多块,如果使用小块的系统,寻址块的操作就要多很多次,磁盘的读写效率就会下降,文件系统的优化就是针对我们使用中常用文件的大小,来调整块的大小,达到空间利用率和磁盘读写效率的最佳点。系统中的文件大多很小,Block
size设得小一点,反之设大一点。

格式化磁盘的命令:mkfs.ext3 -b 1024  /dev/sda2  将分区sda2格式化为ext3文件系统格式并且块的大小为1024。 如果要改变块的大小:mkfs.ext3 -b 4096 /dev/sda2


对于文件的寻址,一种是按照块来寻址,如下图:

右边是节点区(也叫索引区),file1占用两块,file2占用两块,读写文件时,按照上图的编址方式,file1就需要两次寻址,现在我们进行改进,如下图:

一个块作为一个节点:


块大小不同,使用的效率不同:

两个块作为一个节点编址,file1只需要一次寻址。

查看分区的文件系统信息,可以使用 tune2fs -l /dev/sda2命令来查看。

从Inode count和Block count看,基本上是1:2的比例,即2个块编为一个寻址节点。

保留块——为管理员保留的磁盘管理空间,默认为总数据块的5%。:mkfs.ext3 -b 4096 -i 8192 -m 2  /dev/sda2,设置保留块的数量占总数的百分比为2%。

使用mkfs.ext3 -b 1024 -i 2048 -m 2  /dev/sda1

与上一个图对比,保留块减少了。

保留的块是为特定用户使用的,这个用户就是root用户和root组用户,这个可以通过tune2fs查看。

tune2fs是用于调整ext2/ext3文件系统特性的工具:
    -l <device>                          查看文件系统信息
    -c <count>                          设置强制自检的挂载次数
    -i  <n day>                          设置强制自检的间隔时间
    -m <percentage>             保留块的百分比
    -j                                          将ext2文件系统转换为ext3格式

通过上面的图,可用空间 + 已用空间 =281157 + 10288 =  291445,而总的可用空间301083,301083 - 291445 =9638,正好等于保留的空间块数,所以即使提示磁盘空间已满,root用户依然可以继续使用。其他用户就不能用了。

文件系统检查工具

fsck    ——  检查文件系统数据完整性的工具

用法一:fsck -t ext2  /dev/sdb1
用法二:fsck.ext2  /dev/sdb1

使用mkfs -t -y /dev/sda1  选项-y可以自动修复发现的问题。

e2fsck  ——  检查ext2/ext3文件系统的工具(危险!)

使用磁盘配额

磁盘配额作用是限制普通用户使用的磁盘空间,不至于因为个别人的浪费影响所有人的使用。

需要内核支持

只有ext2/ext3文件系统目前被支持

需要用户程序quota软件包

磁盘配额配置过程

- 使用usrquota,grpquota选项挂载一个分区,激活内核的支持,usrquota支持用户配额,grpquota支持组配额。
    mount -o usrquota,grpquota /dev/sdb1 /mnt/d1 或
    mount -o remount,usrquota,grpquota /

这个命令将配置信息写入了/etc/mtab文件中,如果这个文件中没有记录上,也不会起作用的。

- init 1 (进入单用户环境)

- quotacheck -cvuga 检查并且创建磁盘配额的数据库文件,保存在每一个分区的根目录下。

c表示创建,v表示显示过程ug是对用户和组创建磁盘配额,a表示对所有配置有磁盘配额的分区进行创建,如果要单独对某个分区做,去掉a,后面跟设备分区

这时需要reboot重新启动计算机才能起作用,但是也可以使用quotaon -a命令激活

- edquota -u <username>为指定用户分配磁盘空间和节点数量

为redhat用户编辑配额情况,使用edquota -u redhat,出现如下界面:

进行如下设置:

然后作如下实验:

先在sda1分区上创建一个redhat目录,并将其权限赋给redhat用户,然后切换到redhat用户,用quota查看磁盘限额,已用块是2,软限制(quota)是1024,硬限制(limit)是4096,grace是超过软限制剩余的时间,文件数是1,就是redhat这个目录占用的,软限制是2,硬限制是4,写入一个文件,大小是1M后,blocks已用数是1032,并且后面带有一个星号,说明超过软限制了,grace显示还有多少天可以使用。

连续写入文件:

到文件4时,提示出现错误:Disk quota exceeded,磁盘配额超出。使用quota查看,可以看到,blocks还没有超出limit,files超过limit了,是节点硬限制起作用了。这时我们虽然不能新建文件,但是可以编辑原来的文件,因为块没有用完,可以继续添加内容或编辑内容,即使块也用完了,也可以继续编辑原来的文件,因为有的文件占用的块空间可能没用完。删掉一个文件file3,重写file1和file2,数据量增大:

块空间达到了硬限制,文件节点还可以增加,就是还可以增加文件,到底可不可以呢?

通过实验,可以看到再rhel5.4中是不能添加文件了,即使是空文件也不能,而在视频中确是可以创建空文件的,所以都要限制,以免被人用空文件塞满空间。

使用exit退出redhat用户,用root查看redhat的磁盘配额:

repquota可以查看所有用户的磁盘配额情况。修改软限制的时间:

关系磁盘配额,使用quotaoff 

- quota命令可以查看用户的配额使用情况

Linux中的分区与格式化

- 分区与格式化原理

- 使用Linux中的fdisk分区

- 使用mkfs创建文件系统

- 硬盘分区的挂载

分区的原理

上图是一个分好区的硬盘,没有分区的磁盘就像一张白纸,分好区后,就具有一定的结构性,分区就是将硬盘分成不同的区域,便于我们使用,硬盘不管分多少个区,它的第一个扇区总是主引导扇区,这个扇区包括了主引导记录MBR,保存操作系统的引导代码,共446个字节,还有64字节的主分区表,每16个字节表示一个分区,所以,一个硬盘最多可以分成4个主分区或者3个主分区一个逻辑分区,主分区表中保存了每个分区的起始位置等信息,最后2个字节55AA,引导扇区标志位,分区的作用就是修改主分区表中的信息,在每个分区的结束位置增加一个结束标志。要增加一个分区,就是在主分区表中增加一条信息,然后修改一下其他分区表记录信息,相应的修改每个分区的结束标志。保存在主分区表中的分区,就称为主分区。因为主分区表最多保存4个分区信息,如果要使用多于4个的分区呢?这就要使用扩展分区来实现。下面是一张具有扩展分区的结构图:

主分区表的第四个分区记录为扩展分区记录,记录整个扩展分区(/dev/dha4)的起始位置,大小等信息,在宽展分区的开始,是扩展分区表,用来记录扩展分区的分区情况,在扩展分区中的分区称为逻辑分区,像这里的/dev/hda5、/dev/hda6、/dev/hda7等,逻辑分区的起始位置,大小等信息都写在扩展分区表当中,;理论上,逻辑分区可以有无数个。分区软件的作用就是操作主分区表和扩展分区表,这就是分区的基本原理。

格式化原理

分好区的一个硬盘是空白的,操作系统不能读写也不能识别,为了操作系统内核能够识别这个分区,必须事先向分区中预写入一定格式的数据,这个过程就称为格式化,在Linux中一般称为创建文件系统。没有格式化的分区是不能直接使用的,没有分区的硬盘是不能格式化的,所以分区和格式化总是连在一起的。

常用的windows/dos分区工具:

fdisk:适用于dos、windows xx

Partition magic:适用于dos、windows

diskpart:windows2000+安装光盘修复控制台

常用Linux分区工具:

fdisk:命令行工具,各种版本和环境都能使用,包含在软件包util-linux中。

sfdisk:命令行工具,各种版本和环境都能使用,包含在软件包util-linux中

diskdruid:图形化分区工具,只能在安装RedHat系列版本的时候可以用。

fdisk一般使用过程

1)、运行命令:fdisk  /dev/hdX   或者fdisk /dev/sdX   (必须是root用户)

2)、添加/删除/修改分区

3)、重新启动计算机

在虚拟机中增加一个硬盘(SCSI),8G,在linux中显示分区情况:

现在开始使用fdisk命令:

键入m显示所有的命令:

a toggle a bootable flag:设定硬盘启动标志
b edit bsd disklabel :编辑bsd磁盘标签
c toggle the dos compatibility flag :设置dos兼容标志
d delete a partition 注:这是删除一个分区的动作;
l list known partition types 注:l是列出分区类型,以供我们设置相应分区的类型;
m print this menu 注:m 是列出帮助信息;
n add a new partition 注:添加一个分区;
    输入 e 硬盘为[延伸]分割区(extend)。
    输入 p 硬盘为[主要]分割区(primary)。
o create a new empty DOS partition table
p print the partition table 注:p列出分区表;
q quit without saving changes 注:不保存退出;
s create a new empty Sun disklabel
t change a partition's system id 注:t 改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit 注:把分区表写入硬盘并退出;
x extra functionality (experts only) 注:扩展应用,专家功能;

p命令打印显示当前设备分区表信息,输入p:

可以看到,这个磁盘有1044个柱面,255个磁头,每磁道63个扇区。键入n,增加一个分区

显示两种类型,e代表扩展分区,p代表主分区。

输入p,新建一个主分区,然后是要输入分区编号,因为这个磁盘以前没有分过区,这是第一个分区,我们就给他分配编号1,然后是输入这个分区的起始柱面,默认值是1,就是从第一个柱面开始,我们就采用这个默认值,因为这是第一个分区,然后是输入本分区最后一个柱面,即确定了分区的大小。一个柱面为一个单位(units),共是255 * 63 * 512 = 8225280 bytes,我们一个分配了40个柱面,大小就是40 * 8225280 = 329011200 bytes / 1024  = 321300 KB /
1024 = 313.76953125MB,一共是313M大小。

我们也可以直接给出分区的大小而不是结束柱面,如:

输入大小要使用+

然后创建一个扩展分区,扩展分区只能有一个。

如果要将剩下的全部空间都给扩展分区,在Last cylinder处直接回车,默认使用最大的柱面数,再看三个分区的开始和结束柱面,是依次紧挨着的,中间没有断号。最后一个分区显示是扩展分区,其System是Extended。扩展分区是不能使用的,必须在扩展分区上创建逻辑分区。

当我们再次输入n新建分区时,出现两个选项:l和p因为我们的主分区+扩展分区只有3个,还可以创建一个主分区,所有有p选项,我们输入p,提示没有可用的自由空间,无法再创建主分区了(因为我们已经用完了空间),出现l,可以创建逻辑分区了,没有了e,说明只能有一个扩展分区。输入l,创建逻辑分区,第一个逻辑分区的起始柱面跟扩展分区的起始柱面相同并且,逻辑分区的分区号只能从5开始,1——4保留给主分区表用。

现在,分区的结构是建好了,但是每个分区是干什么的没有确定,可以使用t命令改变分区文件系统类型,例如,要修改分区2为交换分区:


输入t,然后输入要改变的分区编号,然后输入类型,可以使用L来列出类型列表,可以看到linux swap是82,

分区的类型改变了,变为交换分区。改变逻辑分区为windows的fat32分区,

 删除一个分区,使用d命令:

这里删除第2个分区,这样,在第一和第三个分区中间就空出来一个空间,柱面41——103,我们再建一个分区:

我们给新建分区分配编号4,但是这样的编号其显示与磁盘的空间顺序不一致了,空间顺序/dev/sda4在/dev/sda3前,这会给管理带来一定的混乱,建议最好按顺序来,使用v来验证分区,w进行保存,q不保存直接退出

现在磁盘已经分区了,下一步就要进行格式化。

linux的格式化工具:

mkfs —— 支持ext2、ext3、vfat、msdos、jfs、reiserfs等

用法1:mkfs -t <fstype> <partition>      例如:  mkfs -t ext3  /dev/sda1
用法2:mkfs.<fstype>  <partition>       例如: mkfs.vfat  /dev/sda5

mke2fs ——支持ext2/ext3文件系统

用法:mke2fs |-j|  <partition>           例如:mke2fs -j /dev/hda2

mkfs使用演示:

对于前面做的分区,我们已经知道,sda1文件系统设置为了linux,所以,在格式化时最好保持一致,将sda1格式成ext2/ext3,即使你格式化成fat32格式,也是可以存储数据的,只是会造成管理上的混乱,所以最好是一致。

格式化sda1:

看一下分区,现在格式化分区5:

分区5是windows的fat32分区,使用mkfs.vfat,对于交换分区,/dev/sda4,它是虚拟的不能试用版mkfs进行格式化,只能使用mkswap进行初始化。

分好区,格式化后就可以使用了,使用mount命令进行挂载,使用umount命令进行卸载

mount命令只是临时挂载硬盘,系统重启后就没有了,为了能够自动挂载,需要将挂载配置写入/etc/fstab配置文件:
/dev/sda1 /mnt/d1 ext3 defaults  0   0
defaults 0 0 是mount命令的o选项的参数,第一个0表示是否备份,0表示不备份,第二个0表示是否自检,不自检。

自检的数字只有/目录才能是1,表示首先自检/根目录,然后才能自检其他目录。

如果deaults改成noauto,则系统启动时不自动挂载,手工挂载时,可以直接写挂载目录:

这时系统根据fstab自动寻找挂载的设备。

可以使用df命令查看分区挂载的情形:

使用卷标挂载

- 添加卷标——e2label          例如:e2label  /dev/sda1  test

- 根据卷标挂载                 例如: mount  LABEL=test  /mnt/d2

- 写入/etc/fstab           LABEL=test   /mnt/d2  ext3   defaults  0   0

Ext2/Ext3挂载选项

- ro/rw —— 只读/读写
- exec/noexec —— 允许/不允许可执行
- dev/nodev —— 允许/不允许设备文件
- suid,sgid/nosuid,nosgid —— 允许/不允许suid,sgid文件
- atime/noatime ——更新/不更新节点的访问时间
- async/sync —— 异步/同步磁盘I/O
- user/nouser——允许/不允许普通用户挂载磁盘,用于/etc/fstab文件中的选项

ro/rw选项:

不能写了,分区是只读的。remount选项只适用于已挂载过的分区。

exec/noexec选项:默认所有分区都是exec,即可执行的

/mnt/d3下的ls虽然有可执行权限,但是因为分区挂载限制执行,所以也不能执行了。千万不要将/根分区挂载成noexec,否则系统就不能启动了。当挂载的分区含有一些有害的程序(如病毒)时,使用这个选项。

dev/nodev选项,正常情况下,挂载都是dev的,即都是可识别的设备,当有些时候,如在移动存储介质(软盘)中保存了一个设备文件,用户就可以通过挂载这个设备文件进而访问硬盘,突破权限限制,这是很危险的。这时使用nodev选项

抱歉!评论已关闭.