Linux磁盘管理

小柒博客 Linux283K5字数 6577阅读21分55秒阅读模式

一、Linux磁盘简介

Linux磁盘管理-图片1Linux硬件设备一般都是存放在/dev/下,硬盘格式一般为/dev/sda /dev/sdb,光盘格式为/dev/cdrom

二、硬盘Inode、Block详解

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

inode包含文件的元信息,包括以下内容:

* 文件的字节数

* 文件拥有者的User ID

* 文件的Group ID

* 文件的读、写、执行权限

* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

* 链接数,即有多少文件名指向这个inode

* 文件数据block的位置

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

三、硬链接介绍

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

ln命令,ln 源文件 目标文件;ln  test.txt tmp.txt

运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。

反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

四、软链接介绍

除了硬链接以外,还有一种特殊情况,也就是我们讲的软连接。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

要掌握Linux磁盘分区,先了解一下硬盘的物理结构。

为了便于理解硬盘的物理结构 ,可将硬盘看作一个圆,它是坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘有两面,都可记录信息

要掌握硬盘的分区,需要掌握MBR、扩展分区、逻辑分区的概念。

一个是放置该硬盘的信息区,称之为主引导记录(MBR,Main Boot Record),一个是实际文件数据放置的地方.其中,MBR是整个硬盘最重要的区域,一旦MBR物理实体损坏时,则该硬盘就差不多报废了,一般来说,MBR有512个字节,且可以分为两个部分。

1)第一部分有446个字节,用于存放引导代码,即bootloader

2)第二部分有64个字节,用于存放磁盘分区表.其中,每个分区的信息需要用16个字节来记录。因此,一个硬盘最多可以有4个分区,这4个分区称之为主分区和扩展分区(extended)。

注:通常所说的"硬盘分区"就是指修改磁盘分区表,它定义了"第n个磁盘块是从第x个柱面到第y个柱面".因此,当系统要读取第n个磁盘块时,就是去读硬盘上第x个柱面到第y个柱面的信息。

由于扩展分区只能有一个,所以这4个分区可以是4个主分区或者3个主分区加1个扩展分区,如下所示:

P + P + P + P

P + P + P + E

重点说明的是,扩展分区不能直接使用,还需要将其划分为逻辑分区才行,这样就产生了一个问题,既然扩展分区不能直接使用,但为什么还要划分出一定的空间来给扩展分区呢?这是因为,如果用户想要将硬盘划分为5个分区的话,那该如何?此时,就需要扩展分区来帮忙了。

由于MBR仅能保存4个分区的数据信息,如果超过4个,系统允许在额外的硬盘空间存放另一份磁盘分区信息,这就是扩展分区.若将硬盘分成3P+E,则E实际上是告诉系统,磁盘分区表在另外的那份分区表,即扩展分区其实是指向正确的额外分区表.本身扩展分区不能直接使用,还需要额外将扩展分区分成逻辑分区才能使用,因此,用户通过扩展分区就可以使用5个以上的分区了。

1)实际上,不建议用户将硬盘分为4个主分区,这是因为,假如一个20GB的硬盘,若4个主分区占据了15GB的空间,则剩下的5GB空间完全不能使用,因为已经没有多余的分区表可以记录这些空间了。

2)考虑到磁盘的连续性,一般建议将扩展分区放在最后面的柱面内。

3)理论上允许一个硬盘只有1个主分区,其它空间都分配给扩展分区。

五、Linux磁盘分区

在Windows操作系统中,是先将物理地址分开,再在分区上建立目录.在Windows操作系统中,所有路径都是从盘符开始,如C://program file。

Linux正好相反,是先有目录,再将物理地址映射到目录中。在Linux操作系统中,所有路径都是从根目录开始。Linux默认可分为3个分区,分别是boot分区、swap分区和根分区。

无论是Windows操作系统,还是Linux操作系统,每个分区均可以有不同的文件系统,如FAT32、NTFS、Yaffs2等。

1)boot分区

该分区对应于/boot目录,约100MB.该分区存放Linux的Grub(bootloader)和内核源码。用户可通过访问/boot目录来访问该分区.换句话说,用户对/boot目录的操作就是操作该分区。

2)swap分区

该分区没有对应的目录,故用户无法访问。

Linux下的swap分区即为虚拟内存.虚拟内存用于当系统内存空间不足时,先将临时数据存放在swap分区,等待一段时间后,然后再将数据调入到内存中执行.所以说,虚拟内存只是暂时存放数据,在该空间内并没有执行。

PS:虚拟内存

虚拟内存是指将硬盘上某个区域模拟为内存.因此虚拟内存的实际物理地址仍然在硬盘上.虚拟内存,或者说swap分区只能由系统访问,其大小为物理内存的2倍。

3)根分区

在Linux操作系统中,除/boot目录外的其它所有目录都对应于该分区.因此,用户可通过访问除/boot目录外的其它所有目录来访问该分区。

1、在Linux操作系统中,用户可根据需要进行修改分区.修改后的分区中,同一目录下的文件可能在不同分区中.比如/home目录下有a、b、c三个目录,可将不同的分区挂载到这三个目录下,这种操作是允许的。

2、逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个) 逻辑分割(5号到63号), SATA硬盘则有11个) 逻辑分割(5号到15号)。 (鸟哥版的)

不过根据最新的 linux内核技术规范 中指示,逻辑分区可以无限。

<1>硬盘上至少有1个主分区

<2>逻辑分区不能再进行分区。

3、Linux分区目录和"盘符"的关系:

假如硬盘安装在IDE1的主盘,并用户想分区成6个可以使用的硬盘分区,则可以采用下面两种方式。

方式一:采用3个主分区和3个逻辑分区

方式二:采用1个主分区和5个逻辑分区

当然还有其他的分区方式,只要满足上述说的规则就行

安装Linux时,默认分为三个区,分别是/boot分区、根分区和swap分区.这三个分区分别对应的盘符是hda1、hda2、hda3。

4、Linux允许使用fdisk -l命令和df -h命令来查询其硬盘分区.其中,df无法显示出swap分区的大小。

[root@localhost ~]# df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/hda2 8.8GB 3.1GB 5.3GB 38% / (根分区)

/dev/hda1 99MB 9.2MB 85MB 10% /boot (boot分区)

5、在PC机下,A、B盘并不存在,这两个盘在Linux下类似于hda1/hda3,而C盘类似于hda2,D、E、F盘类似于hda5、hda6、hda7。

6、swap分区不对应"盘符"。

7、若硬盘的MBR已坏,则该磁盘就不能再作为引导盘,只能作为数据盘.因为MBR位于硬盘的起始处,用户不能通过软件进行修复,也不能跳过起始处.而硬盘中间的某个磁道坏了,用户可以软件修复,也可以跳过该磁道。

六、Linux磁盘实战操作

磁盘分区格式说明

linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a-d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a-z),硬盘主分区最多为4个,不用说大家也知道…..

所以主分区从sdb1开始到sdb4,逻辑分区从sdb5开始,(逻辑分区永远从sdb5开始…)

设备名可以使用fdisk –l查看

Linux磁盘管理-图片2

fdisk /dev/sbd                     //给sbd硬盘分区

Command (m for help): m      //帮助

Command action

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                   //列出已知分区类型

m print this menu                    //打印此菜单

n add a new partition              //添加一个新分区

o create a new empty DOS partition table       //创建一个新的空DOS分区表

p print the partition table      //打印分区表

q quit without saving changes                          //退出不保存更改

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)                  //额外的功能(专家只)

Command (m for help): n                                 //新建分区

Command action

e extended                                                        //逻辑分区

p primary partition (1-4)                                  //主分区

输入p                                                                 //新键主分区

Partition number (1-4): 输入1                           //此处要求编号1-4之间

First cylinder (1-10443, default 1):                  //设置分区起始的柱面,直接回车选择默认即可

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-10443, default 10443): +20000M(+20G) //分配空间为20G

Command (m for help): p                                  //此处输入P查看是否分区成功

Command (m for help): n

Command action

e extended

p primary partition (1-4)

输入e      //新键逻辑分区

Partition number (1-4): 2

First cylinder (2613-10443, default 2613): 直接确定

Using default value 2613

Last cylinder, +cylinders or +size{K,M,G} (2613-10443, default 10443): 直接确定

Using default value 10443

Command (m for help): p

Command (m for help): n

Command action

l logical (5 or over)

p primary partition (1-4)

输入l

First cylinder (2613-10443, default 2613): //使用默认,直接确定

Using default value 2613

Last cylinder, +cylinders or +size{K,M,G} (2613-10443, default 10443): +20G

Command (m for help): n

Command action

l logical (5 or over)

p primary partition (1-4)

输入l

First cylinder (2613-6527, default 2613):         //使用默认,直接确定

Using default value 2613

Last cylinder, +cylinders or +size{K,M,G} (2613-10443, default 10443):         //最后不设置磁盘大小直接回车

Command (m for help): w         //保存

[root@localhost ~]# fdisk -l                                          //查看磁盘sdb分区是否成功

磁盘分区成功,下面就要对分区进行格式化了

分别对磁盘进行格式化处理,格式化为ext4文件类型

[root@localhost ~]# mkfs -t ext4 /dev/sdb1

[root@localhost ~]# mkfs -t ext4 /dev/sdb5

创建挂载目录

[root@localhost ~]# mkdir /sdb1

[root@localhost ~]# mkdir /sdb5

挂载 /dev/sdb1 /dev/sdb5

[root@localhost ~]#mount /dev/sdb1 /sdb1

[root@localhost ~]#mount /dev/sdb5 /sdb5

blkid:查看磁盘UUID及文件类型

[root@localhost ~]# blkid

设置开机自动挂载

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

/dev/sdb1 /sdb1 ext4 defaults 0 0
/dev/sdb5 /sdb5 ext4 defaults 0 0

添加以下命令,保存退出即可

/dev/sdb1=UUID /sdb1 ext4 defaults 0 0
/dev/sdb5=UUID /sdb5 ext4 defaults 0 0

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
Wechat
微信扫一扫,加我!
weinxin
微信公众号
微信扫一扫,关注我!
weinxin
Linux最后更新:2024-1-24
小柒博客
  • 本文由 小柒博客 发表于 2017年12月14日08:24:11
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/114.html
评论  2  访客  1  作者  1
    • 运维老司机
      运维老司机 6

      写的不错,感谢博主 :razz:

      • 小柒博客
        小柒博客

        不错

      匿名

      发表评论

      匿名网友
      :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

      拖动滑块以完成验证