您的位置:首页 > 运维架构 > Linux

Linux磁盘管理

2015-08-27 21:14 471 查看
Linux磁盘管理
一、文件系统
要对linux磁盘管理了解,首先需要先了解什么是文件系统。
那么什么是文件系统呢?文件系统是指操作系统中负责管理和储存文件信息的软件机构称为文件管理系统。文件系统用于明确磁盘和分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。所以文件系统是创建在磁盘上面的,因此我们需要先了解下磁盘。我们以机械硬盘为例如下图:





二、磁盘的组成
如上图所示,机械硬盘的组成部分主要有磁盘面、磁头、磁道、柱面和扇区磁盘面负责数据的存储
磁盘面:磁盘是由一叠磁盘面组成,如上图。
磁头(Heads):每个磁头对应一个磁盘面,负责该磁盘面上的数据的读写。
磁道(Track):每个盘面会围绕圆心划分出多个同心圆圈,每个圆圈叫做一个磁道。
柱面(Cylinders):所有盘片上的同一位置的磁道组成的立体叫做一个柱面。
扇区(Sector):以磁道为单位管理磁盘仍然太大,所以又把每个磁道划分出了多个扇区,如上图
三、linux下的磁盘管理
由上面我们知道什么是文件系统和机械师硬盘的组成结构,那么对于linux下的磁盘我们如何进行管理呢?
首先我们需要了解一个重要的概念:linux下一切皆文件。了解这点对于我们来说非常重要,这样对于我们了解linux下的磁盘管理非常重要。下面我们来说下关于查看linux下磁盘的一些使用信息的命令:
1、查看磁盘分区
[root@localhost~]#fdisk-l
<<==============使用命令fdisk-l


Disk/dev/sda:128.8GB,128849018880bytes


255heads,63sectors/track,15665cylinders


Units=cylindersof16065*512=8225280bytes


Sectorsize(logical/physical):512bytes/512bytes


I/Osize(minimum/optimal):512bytes/512bytes


Diskidentifier:0x00073570




[/code]

DeviceBootStartEndBlocksIdSystem


/dev/sda1*12620480083Linux


Partition1doesnotendoncylinderboundary.


/dev/sda2267859629145608eLinuxLVM


Disk/dev/mapper/vg0-root:21.5GB,21474836480bytes


255heads,63sectors/track,2610cylinders


Units=cylindersof16065*512=8225280bytes


Sectorsize(logical/physical):512bytes/512bytes


I/Osize(minimum/optimal):512bytes/512bytes

[/code]

如上面所示:我们查出现在系统上有一块磁盘是sda在dev目录下,其中sda分了2个分区,在/dev/sda1和/dev/sda2。那么我们看下他们的标题所表示的意思:

§Device:表示分区的设备文件名称。

§Boot:表示是否是引导分区。是,则有“*”标识

§Start:表示该分区在硬盘中的起始位置(柱面数)

§End:表示该分区在硬盘中的结束位置(柱面数)

§Blocks:表示分区的大小,以Blocks(块)为单位,默认大小为1024字节

§Id:表示分区对应系统ID号。83表示Linux中的EXT4分区、82表示Swap分区、8e表示LVM逻辑卷。

如上面所示我们知道现在系统中的磁盘为sda和其中的一些基本信息,那么我们如果对此磁盘增加分区呢。由上面的是信息我们可了解到我们的磁盘空间为128.8GB、15665柱面,其中sda1和sda2占了7895个柱面,因此我们还有很多的空间可以使用。下面我们将使用命令来建立一些新的分区。

2、新分区创建

[root@localhost~]#fdisk/dev/sda


WARNING:DOS-compatiblemodeisdeprecated.It'sstronglyrecommendedto

switchoffthemode(command'c')andchangedisplayunitsto

sectors(command'u').


Command(mforhelp):

[/code]

如上图,我是以我的电脑中的磁盘为标准使用命令fdisk/dev/sda就可以对当前的磁盘sda进行再分区的处理,当然我们输入命令的同时还有很多子选项。下面我们来看下这些子选项的内容:

输入m可以查看帮助信息的内容如下:

[root@localhost~]#fdisk/dev/sda


WARNING:DOS-compatiblemodeisdeprecated.It'sstronglyrecommendedto

switchoffthemode(command'c')andchangedisplayunitsto

sectors(command'u').


Command(mforhelp):m

Commandaction

atoggleabootableflag

beditbsddisklabel

ctogglethedoscompatibilityflag

ddeleteapartition<<==============删除分区

llistknownpartitiontypes
<<==============查看ID号
mprintthismenu

naddanewpartition
<<==============新建一个分区
ocreateanewemptyDOSpartitiontable

pprintthepartitiontable
<<==============列出分区信息
qquitwithoutsavingchanges
<<==============不保存退出
screateanewemptySundisklabel

tchangeapartition'ssystemid
<<==============改变分区的ID号
uchangedisplay/entryunits

vverifythepartitiontable

wwritetabletodiskandexit
<<==============保存退出
xextrafunctionality(expertsonly)


Command(mforhelp):

[/code]

以上是我们常用的一些选项。

然后输入n创建一个新分区:


[root@localhost~]#fdisk/dev/sda


WARNING:DOS-compatiblemodeisdeprecated.It'sstronglyrecommendedto

switchoffthemode(command'c')andchangedisplayunitsto

sectors(command'u').


Command(mforhelp):n

Commandaction

eextended<<=======扩展分区

pprimarypartition(1-4)
<<=======主分区
[/code]

如上所示,当输入n需要创建一个分区的时候,系统会让你选择是创建一个什么样的分区,(注:其中一块磁盘最多可以创建4个主分区,扩展分区可以创建多个。使用fdisk命令对于一块磁盘来讲,最多只能管理15个分区)


[root@localhost~]#fdisk/dev/sda


WARNING:DOS-compatiblemodeisdeprecated.It'sstronglyrecommendedto

switchoffthemode(command'c')andchangedisplayunitsto

sectors(command'u').


Command(mforhelp):n

Commandaction

eextended

pprimarypartition(1-4)

p<<=======选择创建主分区

Partitionnumber(1-4):3
<<=======主分区编号为3
Firstcylinder(7859-15665,default7859):
<<=======选着起始柱面
Usingdefaultvalue7859

Lastcylinder,+cylindersor+size{K,M,G}(7859-15665,default15665):+10G
<<=======选着结束柱面(我们可以以+K,M,G的形式来添加)我这边所使用的+10G

Command(mforhelp):

[/code]

如上所示我们的一个磁盘分区就创建完成了,我们要查看新建的磁盘分区可以使用命令p来试下,如下:


Command(mforhelp):p


Disk/dev/sda:128.8GB,128849018880bytes

255heads,63sectors/track,15665cylinders

Units=cylindersof16065*512=8225280bytes

Sectorsize(logical/physical):512bytes/512bytes

I/Osize(minimum/optimal):512bytes/512bytes

Diskidentifier:0x00073570


DeviceBootStartEndBlocksIdSystem

/dev/sda1*12620480083Linux

Partition1doesnotendoncylinderboundary.

/dev/sda2267859629145608eLinuxLVM

/dev/sda3785991641048944683Linux


Command(mforhelp):

[/code]

如上所示我们的sda3就创建完成了,当然我们这边还有对以上所有的操作进行保存。在命令提示符下输入w。这样新的磁盘空间就创建完成了。

3、新分区的识别

对于我们新创建的分区,系统内核可能无法识别。我们使用命令cat查看proc/partitions查看当前系统识别的磁盘分区,如下:

[root@localhost~]#cat/proc/partitions

majorminor#blocksname


80125829120sda

81204800sda1

8262914560sda2

[/code]

新分区无法识别我们可以使用命令partx-a后面跟上磁盘的路径如下:

[root@localhost~]#partx-a/dev/sda

BLKPG:Deviceorresourcebusy

erroraddingpartition1

BLKPG:Deviceorresourcebusy

erroraddingpartition2

[root@localhost~]#partx-a/dev/sda

BLKPG:Deviceorresourcebusy

erroraddingpartition1

BLKPG:Deviceorresourcebusy

erroraddingpartition2

BLKPG:Deviceorresourcebusy

erroraddingpartition3

[root@localhost~]#cat/proc/partitions

majorminor#blocksname


80125829120sda

81204800sda1

8262914560sda2

8310489446sda3

253020971520dm-0

25312097152dm-1

253210485760dm-2

253320971520dm-3

[root@localhost~]#

[/code]

如上所示我们可以发现我们刚才创建的sda3,但是有的时候partx这个命令我们需要使用两次才可以。

这样我们的新磁盘分区就创建好了,磁盘新的分区是创建好了,但是如何去实现文件系统的创建呢,新的分区如何创建磁盘系统呢?

4、文件系统的创建

上面我们所做的操作新的磁盘分区我们已经创建好了,但是如何在新的磁盘分区上面创建文件系统?当然linux系统上面支持众多的文件系统(如:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap等)我们这边是以Centos6为例,当然在centos上面最常用的文件系统是ext,这个文件系统也有很多的版本,我们这边以etx4为例。

创建文件系统我们使用命令:

mkfs.FS_TYPE/dev/DEVICE

我们把之前创建的新的磁盘分区创建为ext4的文件系统,如下:

[root@localhost~]#mkfs.ext4/dev/sda3
<<======指定文件系统ext4路径问/dev/sda3
mke2fs1.41.12(17-May-2010)

Filesystemlabel=

OStype:Linux

Blocksize=4096(log=2)

Fragmentsize=4096(log=2)

Stride=0blocks,Stripeblocks

655776inodes,2622361blocks

131118blocks(5.00%)reservedforthesuperuser

Firstdatablock=0

Maximumfilesystemblocks=2688548864

81blockgroups

32768blockspergroup,32768fragmentspergroup

8096inodespergroup

Superblockbackupsstoredonblocks:

	32768,98304,163840,229376,294912,819200,884736,1605632


Writinginodetables:done

Creatingjournal(32768blocks):done

Writingsuperblocksandfilesystemaccountinginformation:done


Thisfilesystemwillbeautomaticallycheckedevery20mountsor

180days,whichevercomesfirst.Usetune2fs-cor-itooverride.

[root@localhost~]#

[/code]

这样我们新分区上的一个文件系统就创建完成了。

对于ext系类的文件系统我们也可以使用mke2fs来创建,当然这个命令也可以跟很多选项,这边简要的说明几个常用的如下:

-t{ext2|ext4|ext4}:指定文件系统类型

-b{1024|2048|4096}:创建块大小(注:默认的为4096)

-L“LABEL”:指定卷标

........

那么我们来测试下如:创建/dev/sda3的文件系统,块大小为2048,文件系统ext4,标为卷TEST

[root@localhost~]#mke2fs-text4-b2048-L"TEST"/dev/sda3

mke2fs1.41.12(17-May-2010)

Filesystemlabel=TEST
<<======卷标为“TEST”
OStype:Linux

Blocksize=2048(log=1)
<<======块大小为2048
Fragmentsize=2048(log=1)

Stride=0blocks,Stripeblocks

657408inodes,5244722blocks

262236blocks(5.00%)reservedforthesuperuser

Firstdatablock=0

Maximumfilesystemblocks=543162368

321blockgroups

16384blockspergroup,16384fragmentspergroup

2048inodespergroup

Superblockbackupsstoredonblocks:

	16384,49152,81920,114688,147456,409600,442368,802816,1327104,

	2048000,3981312


Writinginodetables:done

Creatingjournal(32768blocks):done

Writingsuperblocksandfilesystemaccountinginformation:done


Thisfilesystemwillbeautomaticallycheckedevery22mountsor

180days,whichevercomesfirst.Usetune2fs-cor-itooverride.

[root@localhost~]#

[/code]

这样我们新分区的文件系统就创建好了。文件系统创建好了,但是我们如何去使用它呢?

5、挂载磁盘

以上我们了解了磁盘的分区、载入新分区和创建新分区的文件系统。我们下面来简单的说明下新分区文件系统的挂载:

这里我我们要使用命令mount,当然我们也可以只使用mount显示当前系统所挂载的所有设备,如:

[root@localhost~]#mount

/dev/mapper/vg0-rooton/typeext4(rw)

procon/proctypeproc(rw)

sysfson/systypesysfs(rw)

devptson/dev/ptstypedevpts(rw,gid=5,mode=620)

tmpfson/dev/shmtypetmpfs(rw)

/dev/sda1on/boottypeext4(rw)

/dev/mapper/vg0-usron/usrtypeext4(rw)

/dev/mapper/vg0-varon/vartypeext4(rw)

noneon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw)

[root@localhost~]#

[/code]

当然上图是我们使用mount命令查看当前系统上面所挂载的设备,而我们新建的文件系统还没有挂载,所以不会显示。

mount的用法:

mount[-fnrsvw][-tvfstype][-ooptions]devicedir

device:指明要挂载的设备;

(1)设备文件:例如/dev/sda5

(2)卷标:-L'LABEL',例如-L'MYDATA'

(3)UUID,-U'UUID':例如-U'0c50523c-43f1-45e7-85c0-a126711d406e'

(4)伪文件系统名称:proc,sysfs,devtmpfs,configfs

dir:挂载点

事先存在;建议使用空目录;

进程正在使用中的设备无法被卸载;

[root@localhost~]#mount/dev/sda3/media/disk/
<<========将/dev/sda3这分区挂载到/media/disk(注:disk是目录,且必须事先存在)
[root@localhost~]#mount
<<========然后我们使用mount命令查看挂载信息
/dev/mapper/vg0-rooton/typeext4(rw)

procon/proctypeproc(rw)

sysfson/systypesysfs(rw)

devptson/dev/ptstypedevpts(rw,gid=5,mode=620)

tmpfson/dev/shmtypetmpfs(rw)

/dev/sda1on/boottypeext4(rw)

/dev/mapper/vg0-usron/usrtypeext4(rw)

/dev/mapper/vg0-varon/vartypeext4(rw)

noneon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw)

/dev/sda3on/media/disktypeext4(rw)
<<=========我们刚才挂载的sda3就现在在这边了
[root@localhost~]#

[/code]

这样我们的sda3就挂载完成了,我们可以su到里面来建些文件来试下。

[root@localhost~]#cd/media/disk/

[root@localhostdisk]#ll

total16

drwx------2rootroot16384Aug2603:19lost+found

[root@localhostdisk]#toucha.txt
<<=========创建一个文件
[root@localhostdisk]#mkdirdeanzhu
<<=========创建一个目录
[root@localhostdisk]#ll

total18

-rw-r--r--1rootroot0Aug2605:57a.txt

drwxr-xr-x2rootroot2048Aug2605:57deanzhu

drwx------2rootroot16384Aug2603:19lost+found

[root@localhostdisk]#

[/code]

当然对于mount这个命令本事来说它还有很多选项如:

常用命令选项:

-tvsftype:指定要挂载的设备上的文件系统类型;

-r:readonly,只读挂载;

-w:readandwrite,读写挂载;

-n:不更新/etc/mtab;

-a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

-L'LABEL':以卷标指定挂载设备;

-U'UUID':以UUID指定要挂载的设备;

-B,--bind:绑定目录到另一个目录上;

当然我们这边了解了挂载,加入我想取消挂载要怎么做呢,我们要使用命令umount后面加上挂载点的位置或者是挂载分区的位置,如:

[root@localhost~]#umount/dev/sda3
<<=========取消sda3的挂载
[root@localhost~]#mount
<<=========使用mount命令再次查看就没有sda3挂载了
/dev/mapper/vg0-rooton/typeext4(rw)

procon/proctypeproc(rw)

sysfson/systypesysfs(rw)

devptson/dev/ptstypedevpts(rw,gid=5,mode=620)

tmpfson/dev/shmtypetmpfs(rw)

/dev/sda1on/boottypeext4(rw)

/dev/mapper/vg0-usron/usrtypeext4(rw)

/dev/mapper/vg0-varon/vartypeext4(rw)

noneon/proc/sys/fs/binfmt_misctypebinfmt_misc(rw)

[root@localhost~]#

[/code]

注:我们使用命令这种方式挂载它只是一时性的,当我们将系统重启过之后挂载就会消失,那么就需要重新挂载才可以使用。

6、修改配置文件,使系统重启后不需要重新挂载

文件挂载的配置文件:/etc/fstab,我们来查看下/etc/fstab这个文件。

[root@localhost~]#cat/etc/fstab


#

#/etc/fstab

#CreatedbyanacondaonFriAug1412:36:212015

#

#Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk'

#Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(8)formoreinfo

#

/dev/mapper/vg0-root/ext4defaults11

UUID=06cc06e7-3636-40b1-8135-409f4a840747/bootext4defaults12

/dev/mapper/vg0-usr/usrext4defaults12

/dev/mapper/vg0-var/varext4defaults12

/dev/mapper/vg0-swapswapswapdefaults00

tmpfs/dev/shmtmpfsdefaults00

devpts/dev/ptsdevptsgid=5,mode=62000

sysfs/syssysfsdefaults00

proc/procprocdefaults00

要挂载的设备或伪文件系统挂载点文件系统类型挂载选项储频率	自检次序

[/code]

如上其中每行定义一个要挂载的文件系统;上图中我已经将每行所表示的意思用红字标出,下面也做了相应的解释,如下:

要挂载的设备或伪文件系统:设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc,sysfs)

挂载选项:defaults(这个是默认值)

转储频率:0:不做备份;1:每天转储;2:每隔一天转储

自检次序:0:不自检;1:首先自检;一般只有rootfs才用1;等

如果我们要想系统在启动时自动挂载文件系统,我们只需要编辑/etc/fstab这个文件即可。

四、小结

对于linux的磁盘管理我这边只是提到一点点的内容,当然如果你要是想了解更多的关于linux下的磁盘管理和文件系统还需要学习的更多。我这边在写下点命令都是和linux磁盘管理和系统管理有关的,有时间的话可以去查看下具体的用法(swapon:挂载交换分区;free[OPTION]:查看内存空间使用状态;df:文件系统空间占用等信息查看;blkid:块设备属性信息查看;mkswap:创建交换分区等)这纯属个人学习的一些总结,还有很多不足的地方。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: