云网牛站
所在位置:首页 > Linux培训 > Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

2018-07-09 16:39:40作者:魏文应稿源:秋的懵懂

本篇为你介绍专业的Linux知识,分别是硬盘介绍、磁盘管理、文件系统组成和磁盘加密。

 

第一部分:硬盘介绍和磁盘管理

一、硬盘

硬盘的正常使用流程:

购买设备 -> 设备联机 -> 磁盘分区 -> 磁盘格式化(创建文件系统) -> 磁盘挂载 -> 正常使用

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

我们看 /dev/sda1 之类的:

/dev/ : 设备文件目录。

sd : SCSI接口类型的硬盘。

a : 代表第几块盘,a代表第一块盘。

1 : 分区,1、2、3、4是主分区,5、6、7、8、9等是逻辑分区。

 

二、使用fdisk管理分区

注意:fdisk 无法支持 2T 以上容量的磁盘分区,超过2T,请使用后面将会讲到的parted工具。

1.实验准备

做实验之前,添加一块硬盘,VMware虚拟机中,点击添加,然后添加一块硬盘:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

然后重启系统,用 fdisk -l 命令就可以看到新添加的硬盘了:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

图中的 /dev/sdb 就是我们刚才添加的硬盘。

2.给一块磁盘分区

实验 fdisk 命令,加上磁盘,比如我要对sdb磁盘分区,执行 fdisk /dev/sdb 命令,然后会进入fdisk的一些命令提示中,输入m打印帮助信息:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

然后输入相应的分区命令:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

然后输入 w 保存退出,分区完成,执行命令ls /dev/sd*, 就能看到刚才分区得到的磁盘分区了。接下来,格式化分区:

mkfs.ext4 /dev/sdb1

这里我格式化为ext4类型文件系统,你也可以格式化为其它类型(输入mkfs,再按两下Tab键,就能看到有哪些文件系统类型可以选择)。通过 blkid命令,查看硬盘分区类型:

blkid /dev/sdb1

然后挂载分区:

# 创建一个挂载点

mkdir /sdb1

# 将/dev/sdb1分区挂载到/sdb1

mount /dev/sdb1 /sdb1

# 查看一下挂载上了没有

df -Th | tail 1

进入/sdb1这个目录,如果看到 lost+found 文件夹,也你能说明挂载没有问题。注意:磁盘挂载中,一个挂载点可以挂载多个磁盘,比如:

mount /dev/sdb2 /sdb1

mount /dev/sdb1 /sdb1

这里都挂载到/sdb1这个目录下,那么去掉这个挂载点,你就要umount 两次:

umount /sdb1

umount /sdb1

这样 /sdb1 这个挂载点才没有挂载磁盘。当然,也可以直接指定设备去卸载:

umount /dev/sdb1

3.开机自动挂载分区

刚才mount 是手动挂载磁盘分区,下面是开机自动挂载。在 /etc/fstab 文件中,加入下面一句话:

/dev/sdb1 /sdb1 ext4 defaults 0 0

它是什么意思呢?意思如下:

/dev/sdb1

/sdb1

ext4

defaults

0

0

要挂载的设备分区

挂载点

文件系统类型

挂载选项

是否要备份

是否检测

考虑到 /dev/sdb1 不是唯一的(因为这个值是变的),比如:

/dev/sda 磁盘disk1

/dev/sdb 磁盘disk2

/dev/sdc 磁盘disk3

这里表示有三块磁盘,如果 磁盘disk1 被拔下来了,重新开机时就是(因为系统检测到磁盘,是a/b/c/d这样来排列的,先从a开始表示第一块磁盘):

/dev/sda 磁盘disk2

/dev/sdb 磁盘disk3

如果我们还认为 /dev/sda 是 磁盘disk1 ,就会发生问题,因为这时它是 磁盘disk2。为了解决这个问题,我们应该用 UUID标识 一块磁盘(UUID具有全球唯一性),所以我们应该这样:

UUID=9d0d24e5-0bbe-463e-9cfa-ec6c9f44cca8 /sdb1  ext4defaults0 0

这个 UUID 可以通过 blkid 这个命令查询得到:

blkid /dev/sdb1

4.让/etc/fstab内容立即生效

我们在修改了磁盘配置文件 /etc/fstab 这个文件以后,可以执行下面命令让其生效:

mount -a

这个命令执行了 /etc/fstab 的配置信息。

5.将剩余磁盘容量都给逻辑分区

当我们创建了一些主分区以后,我们还想创建逻辑分区,那么我们就可以先执行操作,将剩下的容量都给了逻辑分区:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

我这里sdb4就是剩下容量。然后我们可以和之前创建主分区一样的方法,创建逻辑分区。注意:这时候的sdb4是不能直接访问的。 意思是我们要在sdb4的基础上,创建逻辑分区。

 

三、使用parted分区工具

GPT 分区表:全球唯一标识分区表, GPT对分区数量没有限制(windows系统GPT有限制,最大128个分区,可管理磁盘大小18EB,NTFS文件系统最大才支持256TB)。

MBR 分区表:最大4个分区表项。

parted工具:适用于大容量磁盘的分区(超过2T)。

1.准备工作:

查看parted工具是否已经安装: rpm -rf `which parted。

查看磁盘状态信息:parted -l

在VMware设置中添加一块新的磁盘,大小为3T(你的物理磁盘没有这么大没有关系,这是虚拟的),reboot重启linux。

使用 fdisk -l 命令,看看有没有我们刚才添加的3T磁盘,我这里是/dev/sdc。

2.然后对磁盘进行分区操作:

指定要分区磁盘: parted /dev/sdc。

上面一步开始,就进入了parted命令行操作。

指定分区表类型: mklabel gpt 。

创建分区: mkpart primary 0 100 (primary是分区名称,你任意取一个,0是分区起始地址,100是100M大小)。

忽略警告信息(这是分区比较小的提示信息,如果大点就没有这个警告了): ignore :

warning: The resulting partition is not properly aligned for best performance.

警告:结果分区没有正确对齐以获得最佳性能。

可以查看一下分区结果: print。

最后退出parted : quit 。

3.可以分一个大点的分区:

指定要分区磁盘: parted /dev/sdc。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

最后退出parted : quit 。

4.对分区进行格式化和挂载:

格式化分区: mkfs.ext4 /dev/sdc1 (我这里是/dev/sdc1这个分区,你根据自己要格式化的分区而定)。

创建挂载点: mkdir /sdc1 。

挂载: mount /dev/sdc1 /sdc1 。

在格式化分区时,如果没有安装相关文件系统格式化工具,可以用yum搜索安装,比如安装mkfs.xfs 工具

yum search mkfs

或者

yum search xfs

比如结果显示: xfsprogs.i686,那么用yum安装它即可:yum -y install xfsprogs.i686 。

 

四、扩展swap分区

我们可以对swap分区大小进行修改。下面扩大swap分区:

创建两个逻辑分区,我这里是/dev/sdb3、/dev/sdb5,这两个分区100M。

格式化分区(swap专用工具):mkswap /dev/sdb3 、mkswap /dev/sdb5 。

可以查看一下内存情况: free -m (MB为单位显示)。

添加到swap中:swapon /dev/sdb3 。

再查看一下内存情况,你会发现内存swap分区变大了约100M: free -m。

去除swap分区:swapoff /dev/sdb3 (将刚才添加的sdb3从swap分区中去掉)。

1.开机时自动挂载swap分区的方法:

打开配置文件: vim /etc/fstab ,添加刚才的磁盘分区:

/dev/sdb3  swap swap defaults   0 0

更好的做法是,通过 blkid /dev/sdb3指令,查看 /dev/sdb3 的UUID,用UUID替代 /dev/sdb3:

UUID=4fb2dd10-2bc7-48fe-8158-376dd4001c67 swap swap defaults  0 0

直接执行 mount -a 发现不起作用,reboot 重启系统就可以了,然后通过 free -m查看一下。

 

五、问题处理

磁盘分区后,在/dev/目录下找不到刚才新建的分区。

如果分区以后,执行 ls /dev/sdb2 命令,没有看到你的分区(比如我这里是sdb2分区),那么刷新一下磁盘:

partprobe /dev/sdb

如果执行 partprobe /dev/sdb 命令,提示下面错误信息:

Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.

可能是这块磁盘的哪个分区已经被挂载了:

df -Th

比如我们之前执行 mount /dev/sdb1 /sdb1 命令,将 /dev/sdb1/ 挂载了 /sdb1 上,那么我们可以先卸载这个挂载点:

umount /sdb1

然后再执行 partprobe /dev/sdb 命令。如果还是不行,看看磁盘是否有分区被挂载为了swap分区:

cat /proc/swaps

如果有sdb磁盘挂载到swap分区,可以关闭它:

swapoff /dev/sdb3

 

第二部分:文件系统组成和磁盘加密

一、磁盘结构组成

硬盘主要包括:盘片、磁头、盘片主轴、控制电机马达、磁头控制器、数据转换器、接口、缓存等几个部份:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

磁头: 磁盘技术的关键,最昂贵的部件,负责磁盘的读写。

磁道: 当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。

扇区: 磁道等分为若干弧段,一个弧段就是一个扇区。扇区大小为512字节。

柱面: 各磁盘相同位置上,磁道的集合。比如一个磁盘上有两个盘片,两个盘片上0号磁道加起来,就叫一个柱面。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

块(block): 操作系统每次只读取一个扇区,这样效率太低。而是一次性连续读取多个扇区,即 一次性读取一个"块"(block)。这种由多个扇区组成的"块",是 文件存取的最小单位。"块"的大小,最常见的是1KB,即2个扇区组成一个 block。4K =8扇区。

 

二、Linux 文件系统结构

Linux文件系统由三部分构成:文件名、inode节点、block(真正存数据的地方)。Linux 文件系统基本结构可以参考文章:https://ywnz.com/linuxpx/556.html

1.查看inode节点信息

查看某个文件的inode节点信息: stat test.txt 。

查看每个分区inode节点使用情况: df -i 。

查看某个文件的inode节点号: ls -i test.txt 。

 

三、Linux中的硬链接和软链接

文件是通过inode来索引的。

1.硬链接:如下图:

目录下有4个名为a.txt、b.txt、c.txt、d.txt的文件,对应4个inode节点。

它们都指向了同一个文件的存储地址。

修改a.txt、b.txt、c.txt、d.txt中的任何一个,都修改的是同一个存储地址,所以这4文件内容是同步的、一样的。

当删除其中一个文件名,比如 rm a.txt,只是删除了inode1,我们还能通过inode2、inode3或者inode4索引到文件。

删除所有inode节点,虽然文件还在,但文件系统在没有inode索引的情况下,是找不到文件的。这就是删除文件,文件系统就认为这部分磁盘扇区是空闲的。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

2.软链接:认识了硬链接,软链接也很好理解。如下图:

如果 inode2 指向 inode1,这时 b.txt 就是 a.txt 的软链接。

通过 b.txt 打开文件,是 inode2 通过 inode1,才能索引到了文件的存储位置。

如果删除 a.txt 这个文件:rm a.txt,inode2 就找到不到 inode1,当然也不能找到文件了。那么文件就相当于被删除了。这时如果打开b.txt这个文件,就会提示文件找不到。这就是在windows系统中,删除源文件后,点击快捷键,经常提示快捷键找不到文件的原因。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

3.硬链接相关命令操作:

给a.txt文件创建硬链接b.txt :ln a.txt b.txt 。

硬链接不允许指向目录。

硬链接不允许跨分区创建。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

4.软连接相关操作:

给a.txt文件创建软链接b.txt :ln -s a.txt b.txt 。

软链接时通过目录和文件名来索引的。

软链接可以指向目录。

软链接可以跨分区,源文件写为绝对路径。

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

 

四、磁盘加密

1.创建加密磁盘

添加一个分区(我这里是/dev/sdb7)。如果你不会添加分区操作,请参考上文中的第一部分内容。

给分区(我这里是/dev/sdb7)加密:cryptsetup luksFormat /dev/sdb7(输入密码时,要满足复杂度要求,不能是12345678这种简单的密码,比如我的密码是 weiwenying123) :

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

对分区进行映射: cryptsetup luksOpen /dev/sdb7 wwy_disk :

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

对分区进行格式化: mkfs.ext4 /dev/mapper/wwy_disk (wwy_disk根据你起的名称而定)。

创建挂载点: mkdir /wwy_disk 。

挂载: mount /dev/mapper/wwy_disk /wwy_disk :

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

2.加密磁盘开机自动挂载

因为这个磁盘是加密的,所以自动挂载时,需要创建一个密钥文件。

创建存储密钥的文件(你找个地方存): touch /root/tmp/wwy_passwd 。

指定生成密钥文件 : cryptsetup luksAddKey /dev/sdb7 /root/tmp/wwy_passwd 。

磁盘加密配置列表中,加入我们的加密磁盘,打开 /etc/crypttab 文件,加入下面内容:

wwy_disk /dev/sdb7 /root/tmp/wwy_passwd

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

在文件系统配置文件中,加入我们的磁盘 vim /etc/fstab:

/dev/mapper/wwy_disk /wwy_disk ext4   defaults 0 0

3.关闭映射

卸载挂载点: umount /wwy_disk/ 。

关闭映射: cryptsetup luksClose wwy_disk 。

4.其它操作:

如果你想开机手动输入磁盘加密密码,在 /etc/crypttab 文件中就不要加入密钥文件路径:

wwy_disk /dev/sdb7

重启操作系统以后,会提示你输入密码:

Linux专业知识一:硬盘介绍,磁盘管理,文件系统组成和磁盘加密

生成密钥文件: 生成密钥文件时,我们不用这个操作 cryptsetup luksAddKey /dev/sdb7 /root/tmp/wwy_passwd ,也是可以的,但是要修改wwy_passwd 权限为644:

chmod 644 /root/tmp/wwy_passwd

 

相关主题

使用LUKS加密你的磁盘

精选文章
热门文章