本篇为你介绍专业的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虚拟机中,点击添加,然后添加一块硬盘:
然后重启系统,用 fdisk -l 命令就可以看到新添加的硬盘了:
图中的 /dev/sdb 就是我们刚才添加的硬盘。 2.给一块磁盘分区 实验 fdisk 命令,加上磁盘,比如我要对sdb磁盘分区,执行 fdisk /dev/sdb 命令,然后会进入fdisk的一些命令提示中,输入m打印帮助信息:
然后输入相应的分区命令:
然后输入 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 不是唯一的(因为这个值是变的),比如: /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.将剩余磁盘容量都给逻辑分区 当我们创建了一些主分区以后,我们还想创建逻辑分区,那么我们就可以先执行操作,将剩下的容量都给了逻辑分区:
我这里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。
最后退出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
第二部分:文件系统组成和磁盘加密 一、磁盘结构组成 硬盘主要包括:盘片、磁头、盘片主轴、控制电机马达、磁头控制器、数据转换器、接口、缓存等几个部份:
磁头: 磁盘技术的关键,最昂贵的部件,负责磁盘的读写。 磁道: 当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。 扇区: 磁道等分为若干弧段,一个弧段就是一个扇区。扇区大小为512字节。 柱面: 各磁盘相同位置上,磁道的集合。比如一个磁盘上有两个盘片,两个盘片上0号磁道加起来,就叫一个柱面。
块(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索引的情况下,是找不到文件的。这就是删除文件,文件系统就认为这部分磁盘扇区是空闲的。
2.软链接:认识了硬链接,软链接也很好理解。如下图: 如果 inode2 指向 inode1,这时 b.txt 就是 a.txt 的软链接。 通过 b.txt 打开文件,是 inode2 通过 inode1,才能索引到了文件的存储位置。 如果删除 a.txt 这个文件:rm a.txt,inode2 就找到不到 inode1,当然也不能找到文件了。那么文件就相当于被删除了。这时如果打开b.txt这个文件,就会提示文件找不到。这就是在windows系统中,删除源文件后,点击快捷键,经常提示快捷键找不到文件的原因。
3.硬链接相关命令操作: 给a.txt文件创建硬链接b.txt :ln a.txt b.txt 。 硬链接不允许指向目录。 硬链接不允许跨分区创建。
4.软连接相关操作: 给a.txt文件创建软链接b.txt :ln -s a.txt b.txt 。 软链接时通过目录和文件名来索引的。 软链接可以指向目录。 软链接可以跨分区,源文件写为绝对路径。
四、磁盘加密 1.创建加密磁盘 添加一个分区(我这里是/dev/sdb7)。如果你不会添加分区操作,请参考上文中的第一部分内容。 给分区(我这里是/dev/sdb7)加密:cryptsetup luksFormat /dev/sdb7(输入密码时,要满足复杂度要求,不能是12345678这种简单的密码,比如我的密码是 weiwenying123) :
对分区进行映射: cryptsetup luksOpen /dev/sdb7 wwy_disk :
对分区进行格式化: mkfs.ext4 /dev/mapper/wwy_disk (wwy_disk根据你起的名称而定)。 创建挂载点: mkdir /wwy_disk 。 挂载: mount /dev/mapper/wwy_disk /wwy_disk :
2.加密磁盘开机自动挂载 因为这个磁盘是加密的,所以自动挂载时,需要创建一个密钥文件。 创建存储密钥的文件(你找个地方存): touch /root/tmp/wwy_passwd 。 指定生成密钥文件 : cryptsetup luksAddKey /dev/sdb7 /root/tmp/wwy_passwd 。 磁盘加密配置列表中,加入我们的加密磁盘,打开 /etc/crypttab 文件,加入下面内容: wwy_disk /dev/sdb7 /root/tmp/wwy_passwd
在文件系统配置文件中,加入我们的磁盘 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 重启操作系统以后,会提示你输入密码:
生成密钥文件: 生成密钥文件时,我们不用这个操作 cryptsetup luksAddKey /dev/sdb7 /root/tmp/wwy_passwd ,也是可以的,但是要修改wwy_passwd 权限为644: chmod 644 /root/tmp/wwy_passwd
相关主题 |