linux(redhat7)学习笔记(06)存储结构与磁盘划分

第6章 存储结构与磁盘划分

 

一、一切从“/”开始

在Linux系统中并不存在C/D/E/F 等盘符,Linux 系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。

 

/dev 以文件形式存放任何设备与接口

/etc 配置文件

/home 用户家目录

/media 用于挂载设备文件的目录

/opt 放置第三方的软件

/root 系统管理员的家目录

/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等

/var 主要存放经常变化的文件,如日志

 

二、物理设备的命名规则

IDE设备/dev/hd[a-d]

SCSI/SATA/U 盘/dev/sd[a-p]

软驱/dev/fd[0-1]

打印机/dev/lp[0-15]

光驱/dev/cdrom

鼠标/dev/mouse

磁带机/dev/st0 或/dev/ht0

 

硬盘的分区编号也很有讲究:

主分区或扩展分区的编号从 1 开始,到4 结束;

逻辑分区从编号 5 开始。

 

硬盘设备是由大量的扇区组成的,每个扇区的容量为512 字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446 字节,分区表为64 字节,结束符占用2 字节;其中分区表中每记录一个分区信息就需要16 字节,这样一来最多只有4 个分区信息可以写到第一个扇区中,这4 个分区就是4 个主分区。第一个扇区中的数据信息如图:

 

 

硬盘的容量=主分区的容量+扩展分区的容量  

扩展分区的容量=各个逻辑分区的容量之和

 

主分区也可成为“引导分区”,会被操作系统和主板认定为这个硬盘的第一个分区。所以WINDOWS系统中C盘永远都是排在所有磁盘分区的第一的位置上。

 

三、文件系统与数据资料

XFS是一种高性能的日志文件系统,是RHEL 7 中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB。

拿到了一块新的硬盘存储设备后,也需要先分区,然后再格式化文件系统,最后才能挂载并正常使用。硬盘的分区操作取决于您的需求和硬盘大小;您也可以选择不进行分区,但是必须对硬盘进行格式化处理。

 

Linux 系统中有一个名为super block 的“文件摘要信息”。Linux 并不是把文件内容直接写入到这个“文件摘要信息”里面,而是在里面记录着整个文件系统的摘要信息。

Linux 只是把每个文件的权限与属性记录在inode 中,而且每个文件占用一个独立的inode 表格,该表格的大小默认为128 字节,里面记录着如下信息:

􀂾 该文件的访问权限(read、write、execute);

􀂾 该文件的所有者与所属组(owner、group);

􀂾 该文件的大小(size);

􀂾 该文件的创建或内容修改时间(ctime);

􀂾 该文件的最后一次访问时间(atime);

􀂾 该文件的修改时间(mtime);

􀂾 文件的特殊权限(SUID、SGID、SBIT);

􀂾 该文件的真实数据地址(point)。

 

 

“硬盘地图 (superblock) ”会记录整个文件系统的摘要信息,包括inode与block的总量、使用量、剩余量等。

每个inode 与block 都有编号,以上3者可以简略说明如下:

superblock记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

inode记录文件的属性,一个文件占用一个inode,同时记录此文件的资料所在的block 号码;

block实际记录文件的内容,若文件太大时,会占用多个block 。

由于每个inode 与block 都有编号,而每个文件都会占用一个inode ,inode 内则有文件资料放置的block 号码。因此,我们可以知道的是,如果能够找到文件的inode 的话,那么自然就会知道这个文件所放置资料的block 号码, 当然也就能够读出该文件的实际内容了。这是个比较有效率的作法,因此,磁盘就能够在短时间内读取出全部的资料, 读写的效率较高。

 

 

例如:某一个文件的属性与权限信息是存入于编号为4的inode中,此inode中 记录了文件的实际存放于编号为2, 7, 13, 15的四个block中,此时系统就能排列磁盘的读取顺序,一并将四个block 内容读出来,文件内容的读取如下图中的箭头所指定:

上述存取的方法为索引式文件系统(indexed allocation)

而常用的U盘(快闪记忆体),其文件系统一般为FAT格式,这种格式的文件系统并没有inode存在,所以FAT没有办法将这个文件的所有block在一开始就读取出来。每个block号码都记录在前一个block当中,其读取方式如下:

上例中文件内容依次写入1->7->4->15号这四个block 号码中, 但文件系统无法一下知道四个block 的号码,需要一个一个的将每个block 读出后,才会知道下一个block 在何处。如果一个文件内容写入的block 块分散的过于厉害时,则磁盘读取头将无法在磁盘转一圈就读到所有的内容, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容,其效率相对是较低的。

 

所谓的『碎片整理』吧? 需要碎片整理的原因就是文件写入的block太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的blocks汇整在一起,这样资料的读取会比较容易啊!

 

四、文件系统与数据资料

当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。

 

1 mount 文件系统 挂载目录 和umount 文件系统

mount用于挂载文件系统,umount 用于卸载文件系统
参数 作用

-a 挂载所有在/etc/fstab 中定义的文件系统

-t 指定文件系统的类型

 

对于比较新的Linux 系统来讲,一般不需要使用-t 参数来指定文件系统的类型,Linux 系统会自动进行判断。而mount 中的-a 参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。

 

练习 :

在虚拟机中模拟添加了硬盘设备,按照前文讲解的dev 服务命名规则,第二个被识别的SCSI 设备应该会被保存为/dev/sdb

 

[root@linuxprobe /]# ls -l /dev/sd*

brw-rw----. 1 root disk 8,  0 Mar  9  2020 /dev/sda

brw-rw----. 1 root disk 8,  1 Mar  9  2020 /dev/sda1

brw-rw----. 1 root disk 8,  2 Mar  9  2020 /dev/sda2

brw-rw----. 1 root disk 8, 16 Mar  9  2020 /dev/sdb

 

 

在开始使用该硬盘之前还需要进行分区操作,例如从中取出一个200MB 的分区设备以供后面的操作使用。

2 fdisk [磁盘名称]

提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”

参数 作用

m 查看全部可用的参数

n 添加新的分区

d 删除某个分区信息

l 列出所有可用的分区类型

t 改变某个分区的类型

p 查看分区信息

w 保存并退出

q 不保存直接退出

 

[root@linuxprobe /]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0x20dff2f3.

 

Command (m for help): P

 

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x20dff2f3

 

   Device Boot      Start         End      Blocks   Id  System

 

Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p

Partition number (1-4, default 1):

First sector (2048-2097151, default 2048):   

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +200M

Partition 1 of type Linux and of size 200 MiB is set

 

Command (m for help): P

 

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x20dff2f3

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048      411647      204800   83  Linux

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

[root@linuxprobe /]#

执行完毕之后,Linux 系统会自动把这个硬盘主分区抽象成/dev/sdb1 设备文件。我们可以使用file 命令查看该文件的属性.

[root@linuxprobe /]# file /dev/sdb1

/dev/sdb1: block special

 

对存储设备进行分区后还需要进行格式化操作

[root@linuxprobe /]# mkfs.xfs  /dev/sdb1

建目录newDir,挂载/dev/sdb1

[root@linuxprobe /]# mkdir /newDir

[root@linuxprobe /]# mount /dev/sdb1 /newDir

[root@linuxprobe /]# df -h

Filesystem                        Size  Used Avail Use% Mounted on

/dev/mapper/rhel_linuxprobe-root   18G  3.0G   15G  17% /

devtmpfs                          905M     0  905M   0% /dev

tmpfs                             914M  140K  914M   1% /dev/shm

tmpfs                             914M  8.8M  905M   1% /run

tmpfs                             914M     0  914M   0% /sys/fs/cgroup

/dev/sda1                         497M  119M  379M  24% /boot

/dev/sdb1                         197M   11M  187M   6% /newDir

 

写入一个文件test.txt

但重启后,之前的挂载将不再生效,但已写入的文件依然存在,需要重新挂载

[root@linuxprobe /]# mount /dev/sdb1 /newDir

[root@linuxprobe ~]# cd /newDir

[root@linuxprobe newDir]# ls

 

[root@linuxprobe newDir]# ls

test.txt

[root@linuxprobe newDir]# cat test.txt

abcdefg

 

当在/etc/fstab 文件中写入下面的信息,这样在系统重启后也会成功挂载。

/dev/sdb1 /newDir xfs defaults 0 0

 

当然也可以直接COPY文件(例file1)到挂载的硬盘。

[root@linuxprobe ~]# cp file1 /newDir/

[root@linuxprobe ~]# ls -l /newDir/

total 8

-rw-r--r--. 1 root root  7 Mar  9 15:11 file1

-rw-r--r--. 1 root root 20 Mar  9 14:37 test.txt

 

 

 

五、关于交换分区的创建与挂载

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以解决真实物理内存不足的问题。交换分区也叫虚拟内存。生产环境一般为真实内存的1.5-2倍。

下面实例演示200M交换分区的创建(和上例无区别)。

[root@linuxprobe ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): n

Partition type:

   p   primary (1 primary, 0 extended, 3 free)

   e   extended

Select (default p): p

Partition number (2-4, default 2):

First sector (411648-2097151, default 411648):

Using default value 411648

Last sector, +sectors or +size{K,M,G} (411648-2097151, default 2097151): +200M

Partition 2 of type Linux and of size 200 MiB is set

 

Command (m for help): p

 

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x20dff2f3

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048      411647      204800   83  Linux

/dev/sdb2          411648      821247      204800   83  Linux

 

Command (m for help): w

 

 

SWAP 分区专用的格式化命令为mkswap:

[root@linuxprobe Desktop]# mkswap /dev/sdb2

Setting up swapspace version 1, size = 204796 KiB

no label, UUID=8258680d-fe8d-4329-ad2f-4605c6873e36

 

[root@linuxprobe Desktop]# free -m

             total       used       free     shared    buffers     cached

Mem:          1826        794       1032          9          0        266

-/+ buffers/cache:        526       1300

Swap:         2047          0       2047

[root@linuxprobe Desktop]# swapon /dev/sdb2

[root@linuxprobe Desktop]# free -m

             total       used       free     shared    buffers     cached

Mem:          1826        797       1029          9          0        266

-/+ buffers/cache:        529       1297

Swap:         2247          0       2247

 

其中swapon 命令可将已格式化的SWAP 分区设备正式挂载到系统中使用。

 

六、磁盘容量配额

管理员root可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。

 

quota命令还有软限制和硬限制的功能:

软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。

硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

 

RHEL 7安装有quota 磁盘容量配额服务程序包,但存储设备却默认没有开启对quota 的支持,此时需要手动编辑配置文件/etc/fstab,让RHEL 7 系统中的/boot 目录能够支持quota磁盘配额技术。

/dev/mapper/rhel_linuxprobe-root /                       xfs     defaults        1 1

UUID=f484b9bc-1aeb-4e31-827a-cef3270455e2 /boot                   xfs     defaults,uquota        1 2

/dev/mapper/rhel_linuxprobe-swap swap                    swap    defaults        0 0

/dev/sdb1 /newDir xfs defaults 0 0

设置完成后reboot重启

1. quota [参数] 配额文件系统

此命令用于对XFS 文件系统来管理quota 磁盘容量配额

-c 参数用于以参数的形式设置要执行的命令;

-x参数是专家模式,让运维人员能够对quota 服务进行更多复杂的配置。
实例:创建用户tom设置tom对/boote的写入权限,但对写入文件的数量和大小进行了限制

useradd tom

chmod -Rf o+w /boot

xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot

命令来设置用户tom 对/boot 目录的quota 磁盘容量配额。具体的限额控制包括:硬盘使用量的软

限制和硬限制分别为3MB 和6MB;创建文件数量的软限制和硬限制分别为3 个和6 个。

xfs_quota -x -c report /boot

 

 

useradd tom

chmod -Rf o+w /boot

xfs_quota -x -c 'limit bsoft=3m bhard=7m isoft=3 ihard=4 tom' /boot

命令来设置用户tom 对/boot 目录的quota 磁盘容量配额。具体的限额控制包括:硬盘使用量的软

限制和硬限制分别为3MB 和6MB(累计文件大小总和);创建文件数量的软限制和硬限制分别为3 个和4个。

xfs_quota -x -c report /boot

 

 

su - tom

dd if=/dev/zero of=/boot/tom1 bs=2M count=1

执行成功

dd if=/dev/zero of=/boot/tom2 bs=6M count=1

执行失败,文件大小超过受限的7M(目前2+6>7,说明文件总量不能超7M)

dd if=/dev/zero of=/boot/tom2 bs=1M count=1

dd if=/dev/zero of=/boot/tom3 bs=1M count=1

dd if=/dev/zero of=/boot/tom4 bs=1M count=1

成功,文件数4,到上限4,总大小5M,不及上限7M

dd if=/dev/zero of=/boot/tom5 bs=1M count=1

执行失败,虽然容量上限,但总数量达到了上限4,所以无法再创建了。

 

2. edquota [参数] [用户]

 

用于编辑用户的quota 配额限制

-u参数表示要针对哪个用户进行设置;

-g 参数表示要针对哪个用户组进行设置。

例如:增加tom用户在/boot目录下文件数上限4改为5

edquota -u tom

Disk quotas for user tom (uid 1001):

  Filesystem                   blocks       soft       hard     inodes     soft     hard

  /dev/sda1                      5120       3072       7168          4        3        5

此时上例中最后一个命令便可以执行成功了

[root@linuxprobe boot]# su - tom

Last login: Tue Mar 10 11:09:42 CST 2020 on pts/1

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom5 bs=1M count=1

1+0 records in

1+0 records out

1048576 bytes (1.0 MB) copied, 0.0380234 s, 27.6 MB/s

 

七、软硬方式链接

Linux 系统中存在硬链接和软连接2种

1. 硬链接(hard link):可以将它理解为一个“指向原始文件inode 的指针”,每添加一个硬链接,该文件的inode 连接数就会增加1;而且只有当该文件的inode 连接数为0 时,才算彻底将它删除。

2.软链接(也称为符号链接[symbolic link]):当原始文件被删除后,链接文件也将失效

 

例1. 创建硬链接

[root@linuxprobe ~]# echo "hellow"  > mytxt

[root@linuxprobe ~]# cat mytxt

hellow

[root@linuxprobe ~]# ln mytxt hl_mytxt

[root@linuxprobe ~]# cat hl_mytxt

hellow

 [root@linuxprobe ~]# ls -l *mytxt

-rw-r--r--. 2 root root 7 Mar 10 11:43 hl_mytxt

-rw-r--r--. 2 root root 7 Mar 10 11:43 mytxt

[root@linuxprobe ~]# cat hl_mytxt

hellow

[root@linuxprobe ~]# rm -f mytxt

 [root@linuxprobe ~]# ls -l *mytxt

-rw-r--r--. 1 root root 7 Mar 10 11:43 hl_mytxt

[root@linuxprobe ~]# cat hl_mytxt

hellow

 

 

例2. 创建软链接

[root@linuxprobe ~]# echo "world"  > mytxt

[root@linuxprobe ~]# cat mytxt

hellow

[root@linuxprobe ~]# ln -s mytxt sl_mytxt

[root@linuxprobe ~]# cat sl_mytxt

world

[root@linuxprobe ~]# rm -f mytxt

[root@linuxprobe ~]# cat sl_mytxt

cat: sl_mytxt: No such file or directory

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux Redhat 7上,我们可以使用NFS(Network File System)来创建共享盘。NFS是一种网络协议,它允许用户在不同的系统之间共享文件和目录。 首先,我们需要安装并配置NFS服务器。使用以下命令安装NFS: ``` sudo yum install nfs-utils ``` 安装完成后,我们可以编辑`/etc/exports`文件来配置共享的目录和权限。例如,如果我们要将`/opt/shared`目录共享给其他系统,我们可以在`exports`文件中添加以下内容: ``` /opt/shared *(rw,sync,no_root_squash) ``` 其中`/opt/shared`是我们要共享的目录路径,`*`表示允许所有系统访问,`rw`表示读写权限,`sync`表示同步写操作,`no_root_squash`表示允许root用户访问。 接下来,我们需要重新加载NFS服务器配置。使用以下命令重新加载: ``` sudo exportfs -ar ``` 现在,我们可以启动NFS服务并设置开机自启动: ``` sudo systemctl start nfs sudo systemctl enable nfs ``` 现在,我们的共享盘已经准备好了。其他系统可以通过挂载NFS共享盘来访问。使用以下命令挂载: ``` sudo mount nfs_server_ip:/opt/shared /mnt/shared ``` 其中,`nfs_server_ip`是NFS服务器的IP地址,`/mnt/shared`是挂载点目录。 现在,其他系统可以通过`/mnt/shared`目录访问NFS共享盘上的文件和目录。如果需要取消挂载,可以使用以下命令: ``` sudo umount /mnt/shared ``` 这就是在Linux Redhat 7上使用NFS创建共享盘的步骤。通过这种方式,我们可以方便地共享文件和目录给其他系统使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值