Linux学习笔记(四):磁盘和文件系统管理
管理磁盘和文件系统
介绍了基本的文件和目录管理之后,接下来就是磁盘和文件系统的管理。如何分区磁盘和创建文件系统呢?
添加磁盘并进行分区、创建并挂载文件系统
1、确认系统中的磁盘命令——fdisk
fdisk -l [磁盘设备]
代码如下:
[root@localhost ~]# fdisk -l ==>查看目前系统内的所有分区 (这里显示的结果与在交互模式下P命令是相同的,后面讲)</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes ==>磁盘的文件名与容量
heads, 63 sectors/track, 2610 cylinders ==>磁头、扇区与柱面大小
Units = cylinders of 16065 * 512 = 8225280 bytes ==>每个柱面的大小</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1289 1925 5116702+ 83 Linux
/dev/hda4 1926 2610 5502262+ 5 Extended
/dev/hda5 1926 1989 514048+ 82 Linux swap / Solaris
上述各字段的含义:
Device:分区的设备文件名称 Boot:是否是引导分区,即开机区,若是,则用“*”标识
Start :开始柱面,即该分区在硬盘中的起始位置 End :结束柱面,即该分区在硬盘中的结束位置
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节,即1KB
Id:分区类型的ID标记号,对于EXT3分区为83,LVM分区为8e System:分区类型,即磁盘分区内的系统
2、规划硬盘中的分区——fdisk
fdisk [磁盘设备]
使用此命令可进入交互操纵,您可以在下面的交互操纵里面胡作非为,但是切记离开时必须按q命令,不能按w
代码如下:
#找出系统中所在根目录所在磁盘,并查阅该硬盘内的相关信息
[root@localhost ~]# df / <==重点找出磁盘文件名而已
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/hda2 9920624 2968604 6439952 32% /
[root@localhost ~]# fdisk /dev/hda ==>进入交互操纵模式,注意这里不要写具体的数字</p> <p>The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)</p> <p>Command (m for help): m <==等待输入,m是命令菜单
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ==>删除一个分区
l list known partition types ==>创建逻辑分区
m print this menu
n add a new partition ==>增加一个分区
o create a new empty DOS partition table
p print the partition table ==>在屏幕上显示分区表
q quit without saving changes ==>不存储,直接离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id 变更分区类型
u change display/entry units
v verify the partition table
w write table to disk and exit ==>将刚才的操作写入分区表,慎重操作
x extra functionality (experts only)
常见操作有:创建主分区、创建扩展分区(将硬盘的所有剩余空间作为扩展分区)、创建逻辑分区、改变分区的系统代码、保存分区表信息、用partprobe探测硬盘分区变化
下面举出几例做测试,离开时不保存:
代码如下:
Command (m for help): p ==>查看磁盘分区表,和终端命令模式下的fdisk -l 作用相同</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes
heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1289 1925 5116702+ 83 Linux
/dev/hda4 1926 2610 5502262+ 5 Extended
/dev/hda5 1926 1989 514048+ 82 Linux swap / Solaris</p> <p>Command (m for help): d
Partition number (1-5): 4 ==>删除第4个分区</p> <p>Command (m for help): d ==>删除第3个分区
Partition number (1-4): 3</p> <p>Command (m for help): p ==>再次显示时观察下面只显示了前两个分区,第5个没显示</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes
heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux</p> <p>Command (m for help): n ==>创建一个分区
Command action
e extended
p primary partition (1-4)
p ==>选择创建的分区类型为主分区
Partition number (1-4): 4 ==>选择4号做主分区
First cylinder (1289-2610, default 1289):
Using default value 1289 ==>起始柱面若直接按enter键就是使用默认值
Last cylinder or +size or +sizeM or +sizeK (1289-2610, default 2610): +512M</p> <p>Command (m for help): p ==>再次查看分区表,发现多了一个刚从建立的分区4</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes
heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda4 1289 1351 506047+ 83 Linux</p> <p>Command (m for help): n ==>再建一个分区
Command action
e extended
p primary partition (1-4)
e ==>建立扩展分区
Selected partition 3 ==>这个是系统主动选择的分区
First cylinder (1352-2610, default 1352):
Using default value 1352
Last cylinder or +size or +sizeM or +sizeK (1352-2610, default 2610):
Using default value 2610</p> <p>Command (m for help): p</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes
heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1352 2610 10112917+ 5 Extended ==>看,刚新建的扩展分区
/dev/hda4 1289 1351 506047+ 83 Linux</p> <p>Partition table entries are not in disk order</p> <p>Command (m for help): n ==>再多建几个分区玩玩,反正后面不保存就行了,,呵呵
First cylinder (1352-2610, default 1352):
Using default value 1352
Last cylinder or +size or +sizeM or +sizeK (1352-2610, default 2610): +2084
Value out of range.
Last cylinder or +size or +sizeM or +sizeK (1352-2610, default 2610): +2084M</p> <p>Command (m for help): n ==>有没有发现,最后建立2个分区的时候根本没有询问我们要建立是主分区还是扩展分区,为啥?因为分区已经超过4了,您别无选择,只能是扩展分区了。。。
First cylinder (1606-2610, default 1606):
Using default value 1606
Last cylinder or +size or +sizeM or +sizeK (1606-2610, default 2610):
Using default value 2610</p> <p>Command (m for help): p</p> <p>Disk /dev/hda: 21.4 GB, 21474836480 bytes
heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes</p> <p> Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1352 2610 10112917+ 5 Extended
/dev/hda4 1289 1351 506047+ 83 Linux
/dev/hda5 1352 1605 2040223+ 83 Linux ==>这是后面又新建的2个分区
/dev/hda6 1606 2610 8072631 83 Linux</p> <p>Partition table entries are not in disk order</p> <p>Command (m for help): q ==>这里一定要按q啊,因为我刚才仅仅是演示操作,还破坏性的删除了2个分区,你要是真要分区,那就要按w保存了。</p> <p>[root@localhost ~]#
磁盘分好区后,要更新下内核,否则您使用fdisk -l 可能看不到分区后的变化,只有重启才可以。但是使用partprobe强制让内核重新找一次分区表就行了。
代码如下:
[root@localhost ~]# partprobe [/dev/hda ] <==强制让内核重新找一次分区表,则可以立刻看出分区的变化
注意:普通用户没有权限进行硬盘分区,只有root用户可以,但最好是在单用户模式下比较安全,此外,在进行分区的时候,若该硬盘某个分区正在使用当中,则很有可能系统内核会无法加载硬盘的分区表,解决的方法就是将该使用中的分区给卸载,然后再重新分区一次,重新写入分区表。
3、在分区中创建文件系统——mkfs,mkswap
(1)、mkfs
用途:make filesystem,创建文件系统,即格式化
格式:mkfs -t 文件系统类型 分区设备 (-t选项表示可以接受的文件系统格式,如ext3,ext2,vfat等,通常情况下不需要加次选项,因为系统可自动判断使用的是什么文件系统)
上述由于设备/dev/hda3已经挂载了,所我无法再挂载,但可以卸载后再挂载,不做演示。
(2)、mkswap
用途:make swap ,创建文件系统交换系统
格式:mkswap 分区设备
1)在Linux系统中,SWAP分区的作用类似于Windows系统中“虚拟内存”,可以在一定程度上缓解物理内存不足的情况
2)如果系统没有SWAP交换分区,或者现有交换分区的容量不够用,可以通过mkswap命令创建交换文件系统以增加虚拟内存
3)交换分区空间的启用、停用需要使用swapon、swapoff命令,free命令可以查看物理内存、交换空间的使用情况
4)“swapon -s”命令也可查看交换分区的使用情况
代码如下:
[root@localhost ~]# mkswap /dev/hda5 ==>格式化交换分区
Setting up swapspace version 1, size = 526381 kB
[root@localhost ~]# swapon /dev/hda5 ==>启用交换分区
[root@localhost ~]# free | grep -i swap ==>查看交换空间
Swap: 514040 0 514040
[root@localhost ~]# swapoff /dev/hda5 ==>停用交换空间
[root@localhost ~]# free | grep -i swap
Swap: 0 0 0
[root@localhost ~]#
将新硬盘分好区以后,还需要对分区进行格式化(即创建文件系统),并挂载到Linux系统中的指定目录下,然后才能用于存储文件、目录等数据。并且挂载点一定是目录,该目录为进入文件系统的入口。因此,并不是您有任何文件都能使用,必须要挂载到某个目录树的某个目录后,才能使用文件系统。
4、挂载、卸载文件系统——mount,umount
(1)mount
用途:挂载文件系统、ISO镜像到指定文件夹
格式: mount [ -t 类型 ] 存储设备 挂载点目录 (”-t 类型“的选项通常可以省略,大多数Linux系统能够自动识别对应的文件系统类型)
mount -o loop ISO镜像文件 挂载点目录
(2)umount
用途:卸载已挂载的文件系统
格式: umount 存储设备位置
umount 挂载点目录
(3)查看已挂载分区的使用情况(df -hT)
代码如下:
[root@localhost ~]# df -hT ==>查看现有已挂在分区使用情况
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/hda2 ext3 9.5G 2.9G 6.2G 32% /
/dev/hda3 ext3 4.8G 195M 4.3G 5% /home
/dev/hda1 ext3 99M 11M 83M 12% /boot
tmpfs tmpfs 506M 0 506M 0% /dev/shm
[root@localhost ~]# mount /dev/hda3 /home/jzhou ==>将设备/dev/hda3挂载到目录/home/jzhou下
[root@localhost ~]# df -hT ==>再次查看挂载情况
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/hda2 ext3 9.5G 2.9G 6.2G 32% /
/dev/hda3 ext3 4.8G 195M 4.3G 5% /home
/dev/hda1 ext3 99M 11M 83M 12% /boot
tmpfs tmpfs 506M 0 506M 0% /dev/shm
/dev/hda3 ext3 4.8G 195M 4.3G 5% /home/jzhou ==>看,这里多了一个挂载点
[root@localhost ~]# umount /dev/hda3 ==>卸载刚才的挂载
[root@localhost ~]# df -hT ==>再次查看没有了,已成功卸载
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/hda2 ext3 9.5G 2.9G 6.2G 32% /
/dev/hda3 ext3 4.8G 195M 4.3G 5% /home
/dev/hda1 ext3 99M 11M 83M 12% /boot
tmpfs tmpfs 506M 0 506M 0% /dev/shm
[root@localhost ~]#
另外光驱和镜像的挂载只是略有不同,语法其实是一样的,光盘设备一般是/dev/cdrom或者/dev/hdc,镜像嘛,很明显是iso格式的压缩包,挂载镜像时要加 -o loop选项,具体用法网上很多。
5、设置文件系统自动挂载——修改配置文件
系统中的“/etc/fstab”文件可以视为mount命令的配置文件,它包含了需要开机后自动挂载的文件系统目录。
查看一下这个文件的内容如上,其中各个字段的含义如下(前三个字段很重要):
第一个字段:设备位置
第二个字段:挂载点目录
第三个字段:文件系统类型
第四个字段:挂载参数,即mount命令“-o”选项后面可使用的参数
第五个字段:表示文件系统是否需要dump备份(dump是一个备份工具),一般设为1时表示需要,设为0时将被dump所忽略
第六字段:该数字用于决定在系统启动时进行磁盘检查的顺序,0不进行检查,1优先,2其次。对于根分区应设为1,其它分区设为2
设置自动挂载示例:即每次重新开机后,能自动完成挂载。
进入vim 编辑内容,将设备proc的挂载点由/proc改为/home/jzhou,并保存退出:
则再次启动时,会自动挂载到相应目录,上述是演示,之后我又改回来了。
说明:
(1)在/etc/fstab文件中正确设置了相应分区的自动挂载记录以后,手动挂载、卸载该分区时,仅需指定设备名、挂载点中的任意一个作为参数即可,例如,执行“mount /dev/sdb1”或者“umount /mailbox”都可以完成卸载
(2)mount命令不带任何选项、参数时,可以显示当前系统中已经挂载的文件系统信息
LVM简单介绍
Logical Volume Manager,逻辑卷管理
屏蔽了底层磁盘布局,便于动态调整磁盘容量
(需要注意:p /boot分区用于存放引导文件,不能应用LVM机制)
1、LVM机制的基本概念
(1)PV(Physical Volume,物理卷)
整个硬盘,或使用fdisk等工具建立的普通分区
包括许多默认4MB大小的PE(Physical Extent,基本单元)
(2)VG(Volume Group,卷组)
一个或多个物理卷组合而成的整体
(3)LV(Logical Volume,逻辑卷)
从卷组中分割出的一块空间,用于建立文件系统
它们的逻辑关系如下:
我想您已经知道了为什么要存在这个LVM机制了,同大多数虚拟化的东西作用相似,最核心的还是PV,即真实的物理卷,将,多个物理卷组成一个卷组,之后是对这些卷组划分卷,这时与PV完全无关了,这能很好的利用容量和空间,而且当有新的物理卷加入时,只需将其加入逻辑卷就行了。这个机制很像网络里面划分VLAN呢。
LVM的管理命令主要有以下:
主要命令的用法:
pvcreate 设备名
vgcreate 卷组名 物理卷名1 物理卷名2
lvcreate -L 大小 -n 逻辑卷名 卷组名
lvextend -L +大小 /dev/卷组名/逻辑卷名
创建逻辑卷的基本步骤:PV->VG->LV->格式化->挂载使用文件系统
具体步骤:(我的虚拟机不能演示,bash中没有这个pvcreate命令,简单作下理论说明)
(1)、转换物理卷
1)使用fdisk命令规划两个分区 fdisk -l /dev/hda /dev/hdb | grep "LVM"
2)使用pvcreate命令转换上述分区为物理卷
代码如下:
pvcreate /dev/hda1 pvcreate /dev/hdb1
(2)、创建卷组
代码如下:
vgcreate vg_test /hda1 /dev/hdb1
(3)、创建逻辑卷
1)使用lvcreate命令创建逻辑卷lv_test,从卷组vg_test上划出10G空间
代码如下:
lvcreate -L 10G -n lv_test vg_test
2)使用mkfs命令创建ext3文件系统
代码如下:
mkfs -t ext3 /dev/vg_test/lv_test
(4)、格式化为ext3文件系统,并挂载到目录/dirtest
代码如下:
mount /dev/vg_test/lv_test /dirtest
(5)、还可以为逻辑卷扩容
1)使用lvextend命令为逻辑卷lv_test扩充容量,从卷组vg_test上再划出10G给逻辑卷lv_test
代码如下:
2)使用resize2fs命令更新系统识别的文件系统大小
代码如下:
如有错误,请指正,3Q~