技术源于努力
努力实现梦想

linux的磁盘管理 linux入门

硬盘厂商在硬盘出厂之前会做一次格式化,一次低级格式化
低级格式化:按照磁盘的旋转速度、物理结构划分磁道和扇区。这个时候整个硬盘是没有分区的,只是把低级的磁道和扇区划分好了
分区(partition):
1、 创建独立文件系统的,一个硬盘可以创建不同的文件系统。
2、 MBR(master Boot Record):主引导记录,整个磁盘的0盘面0磁道0扇区上一共512byte,属于磁盘的属性,独立于操作系统,
a) 446byte:BootLoader,引导加载器,是一个程序,引导操作系统所在分区的核心文件的。
b) 64byte:
i. 16byte:标示一个分区,所以只能划分4个主分区。

c) 2byte:Magic Number标记这个MBR是否有效

删除一个文件在底层的操作:
1、 先删除文件所属目录中对应文件的目录项,
2、 把这个条目对应的Inode号码在Inode bitmap中标记为空(0),
3、 这个文件所占据的磁盘块在black bitmap中标记为未使用即可。
实际上根本就没有删除数据,如果新存了数据,就可能将删除的数据覆盖掉,覆盖掉了这些数据块就不能回复删除的数据了,新删除的数据还可以通过工具找回来就是这个原理。

复制一个文件的底层操作:

1)、复制文件到其他磁盘空间:复制一个文件比较慢,因为这个文件复制文件实际就是新建立一个文件,内容和要复制的内容一样就成了。

2)、复制的文件在同一个磁盘上,这样只需要复制对应的连接块即可,元数据还是在数据块上,这种复制方式就非常快

剪切一个文件的底层操作:
在同一个分区的前提下,比复制要快多了,因为数据块根本就没有动,只是换了下路径。在不同分区的时候,还是会建立新文件并将要剪切的文件内容填充进新文件,而之前的文件就被删除掉。

在实际的磁盘管理中,文件系统分区是一个非常复杂的过程。首先对整个磁盘进行分区,分区完成后,原数据区并不是划分成Inode区和块位区(block bitmap),而是整个磁盘分区分成N个逻辑组(分区下边的子分区,这些分区叫做块组(block group)),每个磁盘的块组并不是固定的,在原数据的最前端有个块组来说明这些块组详细情况,而这个最前端的块组被称为超级组,每个块中就有Inode位图,block bitmap区域,Inode区域。

文件系统:一个分区就是一个独立的文件系统

Fdisk:可以用来创建和修改分区

Fdisk /dev/sda
	p :显示当前硬件的分区,包括没保存的改动
	n:创建新分区
	d:删除一个分区
	w:保存退出
	q:不保存退出
	t:修改分区类型
	      L:跟在t的后边显示所有类型的话就要用到L
	l:显示所支持的所有类型

虽然用fdisk创建了分区,但是现在还是不能格式化的,因为这里分区虽然分好,但是内核还没有读取到分区表的变化,需要用partprobe来让内核重新读取分区表,在RHEL6上也可以使用partx命令让内核重读分区表。如果是要重读其他存储设备的分区情况,可以用partprobe[/dev/sd*]进行具体磁盘的查看。再用cat /proc/partitions查看,这个文件是查看内核读取设备情况的。只要内核读到了这个设备/dev。。。然后就可以格式化了,通过格式化后再去挂载到某个目录下,然后通过进入目录就可以进入这个分区了。其实挂载就是指针指向的创建。
Fdisk命令最多支持15个分区。这是fdisk的天生限制,超出15个就比较麻烦。

创建文件系统使用的是mkfs

Mkfs:make file system

文件系统的类型:当前内核支持哪些文件系统,只有内核具有这种功能,才可以进行文件系统的创建。Linux支持众多的文件系统,但是当前的内核支持什么文件系统才能创建什么文件系统,如果说在编译内核到2进制的时候去掉了这个功能的话,那么这个内核是不能支持啥文件系统的,只有这个内核具备文件系统这个模块的时候,才可以支持文件系统。Linux源代码中都有这个源代码,但是编译的时候是可以选择的。

通过cat /proc/filesystems来查看当前内核支持的文件系统。要注意的是:这个是查看已经挂载的分区所使用的文件系统,如果没有挂载,那么这里是不显示的。

mkfs:格式化分区,重新创建文件系统。

格式:mkfs  [option] [-t type] [fs-options] device [size]
-t type 指定特定文件系统。
注意:
1、 在写分区的时候一定要指定为具体的分区,不能直接对整块硬盘创建文件系统,如果对整个硬盘创建文件系统,那么会覆盖所有的文件的。
2、 对已经挂载的分区,是不能进行文件系统的创建的,如果要创建,就要先将分区取消挂载。
当使用mkfs –t ext2的时候,系统调用的是mkfs.ext2这个脚本命令。
mkfs –t ext2 = mkfs.ext2
mkfs –t ext3 = mkfs.ext

linux将fat32识别成vfat格式

专门去管理ext系列文件的时候:
mke2fs:专门用来创建或者管理ext系列的文件。直接使用的时候,默认是ext2的文件系统。

mke2fs /dev/sda5 将sda5格式化成ext2的文件系统。
-j:就是加上日志功能,实际上就是ext3类型的文件系统格式。 
-b:block_size 指定块大小,默认:4096,可用取值:1024、2048或者4096
>mke2fs –b 1024 /dev/sda5 创建ext2文件系统并指定块大小为1024字节。
-L :LABEL:指定分区卷标,可以在挂载的时候直接引用卷标。这里不是单纯的指定卷标,而是除了指定卷标,还重新格式化了分区
>mke2fs –L MYHD /dev/sda5 将sda5的磁盘卷标设置为MYHD
查看磁盘的卷标:e2label {/dev/devicename}
>mount –L DEVICE_LABEL /path/to filename 用别名挂载
-m NUM:手动指定超级用户预留的块数百分比。
>mke2fs –m 10 /dev/sda5
-i NUM:指定字节与Inode的比例,为NUM个字节的空间创建一个Inode,默认为8192,这里给出的数值应该为块大小的2^n倍
>mke2fs –i 4096 /dev/sda5
-N NUM:指定Inode个数
-F :强制创建文件系统,也就是即便是文件系统被挂载也会被强制创建文件系统。
-E :用户指定额外文件系统属性。

Blkid:显示或者定位块设备的属性
格式:blkid {DEVICE_path}
>blkid /dev/sda5

E2label:专用来设定和查看卷标,这里仅仅是更改卷标而已,不会格式化分区。
格式:e2label 设备文件 卷标:设定卷标
>e2label /dev/sda5 haha 将/dev/sda5的卷标设置成haha

创建好了文件系统,有的时候需要调整文件系统的属性,且不更改原有的数据,需要用到:Tune2fs

      -j 在不损坏原有数据的情况下,升级文件系统,不能降级,就是从ext2到ext3,但是不能从ext3到ext2。其实就是在当前文件系统无日志功能的情况下添加日志功能而已。
        -L 设定卷标或者修改卷标
	>tune2fs –L heihei /dev/sda5
	>tune2fs –L ‘ ’ /dev/sda5 删除卷标
	-m NUM :调整预留给超级管理员的空间百分比
	-r NUM :指定预留块的数量
	-o :设定默认挂载选项
		1、acl:文件访问控制列表,当挂载的时候没有指定acl,那么挂载的分区是不支持acl的。
	-c NUM:指定挂载NUM 次后进行自检,0或者-1表示关闭此功能
	-i NUM:每挂载NUM天后进行自检,0或者-1 表示关闭此功能。
	-l :显示超级块中记录的信息,而不是超级块本身的信息

Dumpe2fs:显示文件系统属性信息,寻道出来的信息,将分区中的块组和超级块都会显示出来

格式:dumpe2fs [option] DEVICE

     –h DEVICE_path 只查看超级块的信息。h表示head头部的意思

手动检测磁盘情况需要用到:fsck

Fsck:检查并修复linux文件系统,注意文件系统一定是不能挂载的。
    -t FSTYPE:指定文件系统的类型,如果分区是ext2的文件系统,就要用ext2的文件系统类型去修复,如果用xfs去修复,就要报错的。
    -a:自动完成修复

E2fsck:专用于ext系列的文件系统的检查和修复,不用指定修复的分区类型了,只要是ext系列都支持。
    -f:强制修复
    -a:自动修复,为了兼容fsck而设置的。 
    -p:自动修复
>e2fsck –f –p /dev/sda5 强制检查修复sda5

挂载:将当前文件系统关联到当前的根文件系统下。
卸载:将当前文件系统从当前根文件系统移除关联关系。

Mount:挂载
1、 格式:Mount [option] [-o option] DEVICE MOUNT_POINT
设备:
设备文件
卷标:LABEL=””
UUID:UUID=””
挂载点:
要求:
    1、 这个目录并没有被其他进程使用
    2、 目录要事先存在
    3、 目录中原有的文件将会被暂时的隐藏,直到卸载文件系统
挂载完成后,要通过挂载点访问对应文件系统上的文件。在挂载目录下会有一个lost+found这个目录。
>mount /dev/sda5 /home/sa/sda5.d将sda5挂载到sda5.d目录下

2、	mount:显示当前系统已经挂载的设备及挂载点
			Option:
				-a:表示挂载/etc/fstab文件中定义的所有文件系统
				-n:默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab中,使用-n选项在挂载设备时,不把挂载信息写入这个文件,而mount显示的就是这个文件的内容。在centos7上不可用呀	
				-t FSTYPE :指定正在挂载设备上的文件系统的类型:不适用此选项,mount会调用blkid命令获取对应文件系统类型
				-r :挂载的文件为只读文件,然后在这个目录中去创建文件,提示的是只读文件系统而不是没有权限。
				-w:读写挂载,挂载光盘的时候就不会读写,所以当我们挂载光驱的时候,会提示警告,这是只读挂载。
	-o:指定额外的挂载选项,即指定文件系统启用的属性
		-async 异步写入,当我们在进程中需要保存的时候,首先是在内存中保存文件,当我们关机或者用命令调用的时候才会保存到硬盘上,这就造成我们正在编辑的时候如果断电,编辑的文件会丢失的原因。
		-sync  同步写入,每次点击保存的时候都会直接写入到硬盘,从而真正意义上的保存文件。现在的office有个自动保存文件,到了设定的时间就会自己保存,而保存的文件是直接写入到硬盘的,所以现在office都不会丢了。
		-atime 文件每次访问都更新文件访问时间戳,当我们大量进行读写的时候,更新时间戳是没有意义的,而且更新操作是要占用时间的,所以用noatime取消操作。
		-auto 表示这个挂载的设备可以使用-a选项
		-default 如果没有特殊指定,就会使用这里的默认设置。rw,  suid,  dev,  exec,  auto, nouser, and async.
		-dev	当前挂载设备有设备文件,是否允许启用这些设备文件,dev表示启用。
		-exec 允许这个分区上的可执行文件运行,U盘如果怕自动执行,可以用-noexec来静止自动执行
		_netdev 如果挂载的设备是网络映射到其他主机上的文件系统,如果网络不可用,那么就不再挂载这个设备,就会跳过这个设备启动,然后继续启动主机。
		-owner 允许普通用户挂载这个文件系统
		-remount 重新挂载当前文件系统
		-ro	挂载为只读
		-rw	读写挂载	
		-sync 同步写入
		-suid	如果文件设置了suid功能,允许启动suid功能,这是不安全的,所以一般都是nosuid,不要用外来设备设置SUID。
		-loop 挂载回环设备,通常是挂载iso文件的时候,当我们下载了一个iso的文件,想要查看这个文件内容的时候,就可以用这个选项来进行挂载。

Eg:
>mount –o loop /down/xxxx.iso /media 挂载xxx.iso文件到media文件夹。
>mount –r /dev/cdrom  /media  将光盘挂载到media目录下,并且是只读的。
相当于>mount –o ro /dev/cdrom /media 
>mount -w /dev/sda5 /home/sa 将sda5读写挂载到sa目录下
如果在挂载光驱的时候加上-w选项,那么是不会挂载的。
>mount –o remount ,ro /dev/sda5 当我们挂载了sda5之后,发现有属性没有给上,那么可以用remount来重新挂载,并在后边用,隔开读写权限。

Free:查看物理内存和交换空间的使用情况

    -m:以M为单位显示空间大小

查看的结果:

Buff:缓冲空间,把数据先缓存下来,避免数据冲击,主要存储的是原数据
Cache:缓存空间,把数据先存储,等到要调用的时候就直接调用缓存空间的数据,这里面主要存储的是数据。
Buff和cache中的数据要是不在了是不会影响到硬盘数据的完整性的,而这两段空间的目的之一就是加速系统运行速度的。

当系统的内存不够用的时候,就需要用到swap交换空间

由于交换空间是在磁盘上的划分模拟内存结构的空间,读取速度和磁盘数据读取速度一样,所以会大大影响服务器的性能的。有了交换空间,可以实现内存过载使用。

在linux而言,只要有物理内存可用,就不会用swap内存,如果需要设置swap分区,操作如下:
1、 新建立一个分区
a) >fdisk /dev/sda
b) >n
c) >1G
d) >L 查看现有文件类型的种类和编号
e) >t 指定分区对应的文件系统
f) >(linux swap所对应格式的编号)82
g) >partprobe /dev/sda 重新让内存读取分区
2、 创建交换分区的文件系统
>mkswap /dev/sda8 或者用
>mkswap –L heihei /dev/sda8
3、启用挂载交换分区
>swapon /dev/sda8
4、查看内存及交换分区情况
>free
5、关闭已经挂载的交换分区
>swapoff /dev/sda8

任何分区都是需要建立文件系统并挂载后才能使用。用mkswap命令创建:

Mkswap device 创建交换空间的文件系统
		-L LABEL 给交换空间一个标志
	Swapon device 启用或者挂载这个这个分区上的交换空间
		-a 启用所有的定义在/etc/fstab文件中的交换设备。这个时候就不需要指定具体的交换设备了,直接就是swapon –a 
	Swapoff devic 关闭或者卸载这个这个分区上的交换空间
可以使用swaplabel给交换分区命名。
	Swaplabel –L LABEL device
	>swaplabel –L sb /dev/sda8
	>blkid /dev/sda8

回环设备:Loopback,使用软件来模拟实现硬件,只要是这种功能的设备都可以叫本地回环设备。

需求:当我们的磁盘空间已经分区完毕,每个空间都有文件,但是每个空间还有很多的空余空间没有用,交换空间也用完了,怎样去加大交换空间,这就涉及回环设备。

回环设备:Loopback,使用软件来模拟实现硬件,只要是这种功能的设备都可以叫本地回环设备。

在本地创建一个镜像文件,把这个镜像文件当作一个设备文件来使用

可以创建一个回环设备镜像,这个设备是通过软件模拟硬件来的,可以对这个空间进行分区或者扩展,在回环设备上空间可能有100G,实际占用磁盘空间只有10M空间。通过创建回环设备镜像并挂载,也可以实现使用分区空余空间的能力。

创建本地回环设备镜像需要用到dd:

Dd:转换和并复制一个文件

Dd和copy都是有复制功能,但是这两个之间的运行原理不一样

Copy:复制的是整个文件,经过了VFS到内存后再经过VFS到目标位置
Dd:直接在底层进行代码的复制,我们在硬盘代码就是0和1,dd就是直接复制这个文件所在位置的记录代码到目的区域,这个区域是直接到磁盘的目的区域的,没有经过内存和VFS,所以dd可以复制部分的数据。
但来源文件直接指向一个设备的时候,表示从这个设备进行读取,是一个一个字节的读取。
当我们用/dev/zero这个设备来填充创建一个文件,实际上这个文件就是镜像文件,里面全是0填充的,当我们对这个文件进行格式化和挂载操作后,就可以通过挂载点往里面填充内容了,当创建这个空文件填充的总的空间为这个文件最大的空间,实际上占用的空间很少,通过不停的填充,这个文件会越来越大,直到这个填充这个文件到创建时候算出来的大小为止。

dd的用法:

dd option 或者dd [operand] …
	If :input file	数据来源
	Of :output file	数据存储目标
	>dd if=input file of=out file
	Bs:表示每一个块的大小,单位是字节
	Count:表示一共有多少个块
	Seek :表示跳过的块进行复制

Eg:创建一个镜像文件,跳过前边1023个块,复制这个文件最后一个1M的块
dd if=/dev/zero of=/var/swapfile2 bs=1M seek=1023 count=1
Eg:要备份一个磁盘的MBR到U盘上,U盘挂载在/mnt/usb
>dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
Eg:要还原一个磁盘的MBR
>dd if=/mnt/usb/mbr.backup /dev/sda bs=512 count=1
Eg:将光盘中的内容读取出来并做成iso的镜像。
>dd if=/dev/cdrom /home/rhel.iso
>cat /dev/cdrom > /home/rhel.iso
Eg:创建一个镜像文件,并用0进行填充,读取的每个的大小是1M,一共读取1024个
>dd if=/dev/zero /home/sa/swapfile bs=1M count=1024
Eg:创建一个镜像文件,并启用成为swap空间。
>dd if=/dev/zero of=/var/swapfile bs=1M count=1024
>mkswap /var/swapfile
>swapon /var/swapfile 启用这个文件作为swap
>swapoff /var/swapfile 关闭这个swap
注意:创建的swapfile文件不能在/dev/下边,否则在激活交换的时候,会提示无效参数的错误。

Eg:创建一个镜像文件,并且在这个文件上建立文件档案,并挂载到/home/test.disk
>dd if=/dev/zero of=/var/disk.file bs=1M count=1024
>mke2fs /var/disk.file
>mount /var/disk.file /home/test.disk
>du –h /var/swap.file 这个文件创建成的时候有1个G,用ls查看的时候也是1G的大小,实际上用du占据的实际大小的时候,只有1M多点。通过不停的填充,这个文件会越来越大,占据的空间也就越来越多,知道这个内容充满这个1G的空间。

当我们用完了光驱,即便是卸载了/dev/cdrom,但是Linux还是锁定了cdrom,这个时候就需要通过linux将cdrom弹出来,这样才可以从软件上脱离出来,需要用的eject。

Eject:弹出和移除镜像
	格式:eject [option] device或者mountpoint
	-a on或者off 是否自动弹出,通过一些驱动的支持。如果是on 当设备关闭的时候会自动弹出这个设备
	-d 列出默认镜像设备的linux设备名称。.
	-f –floppy 弹出软盘
	-F – force 强制弹出,不检查设备的类型
	-p – proc 这个选项允许去用/proc/mount 而不是/etc/mtab
	-m –no unmount 这个选项告诉弹出去不尝试去卸载完全

赞(0) 感谢小主打赏
未经允许不得转载:新域软件科技 » linux的磁盘管理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏