Linux磁盘与文件系统管理

对于一块磁盘,如果我们想要使用的话,需要对磁盘进行分区并建立文件系统。下面,我们就了解一下Linux中的磁盘与文件系统管理


一、MBR

硬盘的0扇区为MBR扇区,其由以下几部分组成:

主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序。

出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。

分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4

结束标志字,偏移地址01FE–01FF2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

分区表项目占16字节,其各字节含义如下

MBR分区表结构.PNG

因此,机械硬盘的整体结构如下如所示:

blob.png

 

二、GPT

MBR由于存储分区字节的限制,其支持的最大主分区数为4。随着磁盘空间的增大,分区数量的增加,又有了GPT形式的硬盘。

GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点,理论上说,GPT磁盘分区结构对分区的数量好像是没有限制的。但某些操作系统可能会对此有限制。

GPT磁盘分区结构由6部分组成,如下图:

GPT结构.PNG

GPT头位于GPT磁盘的第二个磁盘,也就是1号扇区,该扇区是在创建GPT磁盘时生成,GPT头会定义分区表的起始位置,分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。

分区表位于GPT磁盘的2-33号磁盘,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一共分区,所以Windows系统允许GPT磁盘创建128个分区。

每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID

 

三、磁盘分区

了解了磁盘的引导结构后,下面来看一下如何对磁盘进行分区:

1fdisk

fdisk用于创建MBR分区,也支持GPT分区,对于一块硬盘,最多只能管理15个分区且无法处理大于2TB以上的磁盘分区

fdisk [options] device

-l:输出后面接的设备所有的分区内容。若仅有fdisk -l时,则系统将会把整个系统内能够找到的设备的分区均列出来

Fdisk为交互式命令,其进入命令后的常用选项如下:

d   delete a partition

删除一个分区(若删除扩展分区,则其衍生出来的逻辑分区也会被删除)

n   add a new partition

新增一个分区

p   print the partition table

在屏幕上显示分区表

q   quit without saving changes

不存储,离开fdisk程序

t   change a partition's system id

更改分区类型

w   write table to disk and exit

将操作写入分区表并退出

在分区完成后,我们一般需要通知内核重读分区信息。这是就需要用到partx命令了。

对于新增分区,我们使用的命令为:partx -a -n M:N /dev/DEVICE

对于删除分区,我们使用的命令为:partx-d -n M:N /dev/DEVICE

同样的,在Linux中也有非交互式的分区工具为parted。其用法如下:

parted [options] [device [command [options…]…]]

-l,–list:显示所有的块设备并列出分区

[device]:对给定的设备进行操作,若未给出,则对命令所找到的第一个设备进行操作;

[command [options]]

mklabel label-type:创建一个新的磁盘类型,如gptmsdocmac等;

mkpart part-type [fs-type] start end:创建一个指定类型(primary,logical,extended)分区,由指定的大小(start)开始,到指定大小end为止(默认以M为单位);

print:显示分区表

rm partition:删除分区

 

四、文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

我们常见的文件系统有以下一些:

Linux文件系统: ext2, ext3, ext4, xfsSGI, btrfsOracle, reiserfs, jfsAIX, swap

swap: 交换分区

光盘:iso9660

Windowsfat32, ntfs

Unix: FFSfast, UFSunix, JFS2

网络文件系统:NFS, CIFS

集群文件系统:GFS2, OCFS2oracle

分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre

RAW:未经处理或者未经格式化产生的文件系统

Linux的虚拟文件系统:VFS

Linux中,我们主要通过以下一些命令来创建文件系统:

mkfs – build a Linux filesystem  创建一个Linux文件系统

通过指定文件系统,调用相应文件系统的创建命令来创建文件系统

mkfs [options] [-t type] [fs-options] device [size]

注:size参数的单位是块;若使用mkfs创建ext类型的文件系统时(mkfs.ext4),其可使用mke2fs的选项

-t, –type type:指定要创建的文件系统的类型,若未指定,则使用默认的文件系统类型(当前为ext2

-L:指定卷标

此外,还有专门创建ext系列文件系统的命令:

Mke2fs [options] device

-t {ext2|ext3|ext4}:指定要创建的文件系统的类型,若此项未指定,则默认创建/etc/mke2fs.conf文件中指定的默认类型

-b {1024|2048|4096}:指定要创建的文件系统的块的大小

-L "LABEL":指定卷标

-j:创建带日志功能的文件系统,相当于-t ext3ext3ext2文件系统的区别在于增加了日志功能)

mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3

-i #:为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小

-N #:为数据空间创建个多少个inode

-I inode-size:指定一个inode的所占空间大小,其值应为128byte的整数倍,一般为128byte256byte

-m #:指定为管理人员预留空间占总空间的百分比,默认5%

-c:在创建文件系统之前检查磁盘错误,仅下达 一次-c时,会进行快速读取测试;如果下达两次-c -c时,会测试读写

-O FEATURE[,…]:启用指定特性

-O ^FEATURE:关闭指定特性

-F:强制创建文件系统;如果指定的设备不合法,需指定一次-F选项;如果对挂载中或正在使用中的设备前置创建文件系统,则需指定两次选项-F -F

-g blocks-per-group:后面跟数字,指定每个块组中包含的block数量;默认为32768

一般情况下,我们通常用设备文件来指明设备,但在一些特殊情况下,设备文件与设备的对应关系,会发生改变。因此,在配置文件中最好使用设备的UUIDlabel来指明相应的设备。查看这些相应属性的命令为:

Blkid [options] device

blkid:不加任何选项时显示系统上磁盘个分区的相关信息

-U UUID:根据指定的UUID来查找对应的设备

-L LABLE:根据指定的LABLE来查找对应的设备

-k:显示支持的文件系统与RAID格式

-t NAME=value:显示NAME的值为value的设备,NAME可以为:TYPE,LABLE,UUID

同样的,我们也可以使用一些命令来修改磁盘的一些属性信息。

tune2fs [options] device

-l:查看指定文件系统超级块信息;super block

-L LABEL:修改卷标

-m #:修预留给管理员的空间百分比

-j:添加日志功能,将ext2升级为ext3

-O: 文件系统属性启用或禁用;如:

O ^has_journal:禁用日志

O has_journal:启用日志

-o: 调整文件系统的默认挂载选项;如:

o ^acl:禁用acl权限

o acl:启用acl权限

-U UUID: 修改UUID

 

五、挂载

在分区并格式化完成之后,若要使用磁盘,我们还需要挂载才能使用。挂载命令及选项如下:

Mount [options] device mount_point

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:挂载点,需要事先存在并建议使用空目录

-t, –types vfstype:指定要挂载的设备上的文件系统类型

-r, –read-only:只读挂载

-w, –rw, –read-write:读写挂载

-n, –no-mtab:不更新/etc/mtab,在/etc为只读时比较有用;相当于#mount

-a, –all:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能);挂载所有记录在/etc/fstab文件中的设备;若记录在/etc/fstab文件中的设备已挂载,则不会再再次挂载。

-l:只输入mount会显示目前的挂载信息,加上-l可增列Label名称

-L, –label label:以卷标指定要挂载的设备

-U, –uuid uuid:以UUID指定要挂载的设备

-B, –bind:挂载目录到另一个目录上;卸载时必须要用挂载点来卸载

[-o option[,option]…]:挂载文件系统的选项,多个选项使用逗号分隔

async:异步写入模式

sync:同步模式,内存更改时,同时写磁盘

atime:文件(包含目录与文件)的访问时间戳更新由内核默认配置控制

noatime:不更新文件(包含目录与文件)的访问时间戳

diratime/:允许更新目录的访问时间戳

nodiratime:不更新目录的访问时间戳

auto/noauto:是否支持自动挂载,是否支持-a选项

exec/noexec:是否支持将文件系统上运行应用程序

dev/nodev:是否支持在此文件系统上使用设备文件

suid/nosuid:是否支持suidsgid权限

remount:重新挂载

ro:只读

rw:读写

user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

acl:启用此文件系统上的acl功能

defaults:默认配置,相当于rw, suid, dev, exec, auto, nouser, async

同样,假如我们想要卸载某个设备,我们就可以使用以下命令:

umount [options] device|mount_point

-f:强制卸载;可用在类似网络文件系统(NTFS)无法读取到的情况下

-n:不更新/etc/mtab的情况下卸载

六、自动挂载

在系统中,我们通常需要一些磁盘能够开机自动挂载,这时,我们就需要在配置文件/etc/fstab文件进行配置。下面我们来看一下此配置文件中的内容。

/etc/fstab每行定义一个要挂载的文件系统;其每一列都具有特定的含义;

UUID=90c32584-2c52-4f9e-acf4-b9766aa3d1be    /        xfs    defaults   0       0

1、要挂载的设备或伪文件系统

设备文件、LABEL(LABEL="")UUID(UUID="")、伪文件系统名称(proc, sysfs)

2、挂载点

3、文件系统类型

4、挂载选项:即mount命令中挂载文件系统的选项

5、转储频率

0:不做备份

1:每天转储

2:每隔一天转储

6、自检次序

0:不自检;

1:首先自检;

一般只有rootfs才用1;数字表示自检时的顺序;

原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/41472

(0)
上一篇 2016-08-28 15:17
下一篇 2016-08-29 08:44

相关推荐

  • Linux下常用压缩工具总结

    gzip: 1)只能针对普通文件进行压缩,对文件夹、符号链接无效。 2)如果想对多个文件一起压缩并打包,gzip是无法办到的,需要结合tar进行 [root@mysql-master databackup]# ll 总用量 32 drwx—— 2 root root 4096&nb…

    Linux干货 2016-12-05
  • Python线程指南

    本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。 注意:本文基于Python2.4完成,;如果看到不明白的词汇请记得百度谷歌或维基,whatever。 尊重作者的劳动,转载请注明作者及原文地址 >.< 1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如…

    2015-03-13
  • grub.config文件加密

    作用 在开机启动临时进入1模式的时候,系统先调用/etc/grub.conf。 /etc/grub.conf其实是/boot/grub/grub.conf的软连接。 加密改文件就有效的防止其他用户直接绕过口令登陆1模式,从而进入到root中做一些破坏。 我们可以看一下如何进入1模式。   我们可以看一下临时进入init1模式的窗口 这里的内容与gr…

    2017-07-22
  • Ansible浅谈

    ansible特性:         模块化,调用特定的模块,完成特定的任务;         基于Python语言实现,由Paramiko、PyYAML和Jinja2三个关键模块;         部署简单,agentless; &nbs…

    Linux干货 2016-12-15
  • 配置yum服务器——以centOS 6.9系统为例

    准备工作 关闭防火墙  关闭防火墙service iptables stop  设置防火墙开机不启动chkconfig iptables off  查看一下防火墙状态 iptables -vnL 如下图,可以看到已经关闭 关闭SElinux 使用命令 vim /etc/selinux/config 将SELINUX=enable…

    Linux干货 2017-08-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-29 14:06

    文章对各命令的作用,用法和常用选项总结的很完整,建议能多一些操作,尝试着灵活运用这些工具来实现,分区的创建与格式化并挂载使用。多动手才能明白自己的不足哦。