刘小泽写于18.6.24-7.1 一个星期入门linux
我相信这是比之前写的 “测序的世界” 更浩大的工程,但值得写出来!
磁盘管理:
学好磁盘管理,会对以后自己处理服务器硬盘问题大有裨益
硬盘:
我们每天打交道最多的可能就是硬盘了,只要你开机,硬盘就开始通电工作,可能那会还没来得及开显示器,硬盘就已经在BIOS自检后启动了操作系统,这一切似乎在很短的时间内就完成了。但是它靠的却是机箱里厚重质感的大块头——硬盘
- 硬盘长什么样?
喜欢DIY的朋友应该都了解过,但是大部分用户应该没有见过机箱内的硬盘,或者不清楚其内部构造
先看几张图养养眼~
-
硬盘物理结构相关概念:
数据如何存储的: 磁盘天生并不会记录什么照片、文档文字等,它知道的只有0和1,硬盘有很多磁盘叠在一起,但相互之间又有间隔,通过改变磁盘的磁化方向来存数0和1,这样记录数据
磁头(head)数:每个盘片有上下两面,各对应1个磁头,实现数据的存取
磁道(track):当磁盘旋转时,磁头保持在一个位置上,每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。将最外侧道的编号为0,向内+1
【接下来把磁道想象成跑道,会容易理解的多】柱面(cylinder):不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面【柱面数=一个盘面的磁道数】
【简单说,磁盘就相当于立体的操场,从上到下有很多0跑道,1跑道等
而柱面就是将各个层的同一编号跑道们汇集在一起的称呼】扇区(sector):每个磁道都别切分成很多扇形区域,每个磁道的扇区数量相同,每个扇区大小为512字节
【比如:每个跑道有400米,我们从中可以切分成许多的5.12米,这就是扇区】平均寻道时间:【就是跑完一圈跑道用的时间】
硬盘在接收到系统指令后【起跑口令】,磁头从开始移动到数据所在的磁道所花费时间的平均值。
它在一定程度上体现了硬盘读取数据的能力【相当于运动员的身体素质】,是影响硬盘内部数据传输率的重要参数,单位为毫秒(ms)。
【一般PC为7200RPM; 笔记本5400RPM】
外面柱面速度比内部的快【不难理解:外侧跑道的运动员和内侧跑道的的运动员两个人同时到达终点,当然外侧跑道跑得更快】,所以将一些频繁访问的内容放在靠近外部的柱面,比如C盘。硬盘容量
我们平时所说的几百G甚至上T的硬盘,是这么计算得来的
硬盘的容量=柱面数×磁头数×扇区数×512(字节数)
1T = 1024G = 10242 M = 10243K = 10244B(字节)
-
硬盘的内部逻辑结构:
-
MBR(Main Boot Record)
这是硬盘最核心的代码,没有了它,硬盘中的数据都会丢失
中文名“主引导记录”,它是位于磁盘最前边的一段引导代码,它是生产厂商出厂时对磁初步格式化加入的【Born with loader code】。
职责:负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位【总指挥的角色】
-
组成:三个部分组成(共占用512个字节):
446bytes: BootLoader, 引导程序
-
64bytes:
每16bytes标识一个分区,所以最多只有四个主分区主分区+扩展分区<=4
扩展分区最多只有一个选择只有两个:三主一扩展或四个主分区,否则剩余未分区的空间将无法使用
2bytes: 魔数Magic Number,标记MBR是否有效
-
如何启动的操作系统:【从0到1的过程】
- 开机CPU加载BIOS自检,完成后,根据BIOS中设定的启动次序,依次查找启动设备的MBR,没有MBR就找下一个设备,有MBR但坏了则系统报错,无法启动;
- 先将BootLoader加载到内存中,BIOS退出,BootLoader程序首先读取分区表(就是上面介绍的64bytes的各个分区)根据配置,加载对应分区上操作系统的内核
【没有分区表则无法找到操作系统】; - BootLoader会将内核读进内存,内存读入并解压缩BootLoader将控制权交给内核,内核开始启动自身,根据文件配置找到文件系统在什么地方,找到所需要运行的程序的位置,最终完成启动操作系统。
-
如何实现硬盘快速读取?
想象一个浩大的图书馆,你想找一本书,一般有两种方法:
1.从进门开始一本一本找,想象也知道,可以实现但是太耗时
2.使用索引目录,比如我想找的书是L开头的,就去L区硬盘也是如此,创建完分区后,就是利用文件系统快速搜索文件
文件系统是一个管理软件,它存储在磁盘某个位置上,不在分区上,但它指向的数据在分区上。
它能够把一个分区划分成两片,元数据存储区+数据存储
如果要存储文件怎么办? 核心就是找空闲存储块
如何删除文件呢?删除文件对应的条目
-
把目录中文件对应的inode在块位图中标记为空
【可以就重新利用这个空块位了,只需要再次覆盖】
【重新建新文件,只是将原来的数据块内容覆盖】对应的磁盘块虽然标记为空,可以继续使用,但里面的数据没动数据恢复工具就是利用这个原理恢复的
所谓的“文件粉碎机、强力删除”其实就是利用一大堆的随机数据,把磁盘覆盖掉了,比如用一大堆0把原来文件占据的数据块全填满【可不是简单的标记数据块为0哦】
-
文件复制与剪切:
你是否发现了在一个盘内复制文件比剪切要慢?
原因就是:
复制是在新分区上建立一个新文件,在老分区上把文件复制过去,然后把老分区的删掉:
剪切:就是把文件的目录调整了一下,inode没换,数据没换
【这仅仅对于同一个分区内的文件来讲,换一个分区和复制速度差不多】 -
硬连接和软链接:
-
硬链接:
- 直接指向同一个inode的不同路径,彼此之间就叫硬链接
【删除其中一个不影响访问另一个】
- 创建:
ln 原路径SRC 目标路径DEST
- 只能对文件创建,不能应用于目录
- 不能跨文件系统
- 创建硬链接会增加文件被链接的次数
-
软链接:
- 一个路径指向的inode,存储的是另一个路径
- 创建:
ln -s SRC DEST
- 如果删除了SRC,链接文件也不能访问
- 可应用于目录,可以跨文件系统
- 不会增加被链接文件的链接次数
- 软链接文件大小为指定的路径所包含的字符个数
-
-
文件系统管理:
-
du
:显示一个文件或目录占据系统整体空间大小- -s :(summarize)显示整个目录大小
- -h:human-readable,以K、M、G显示
-
df
:显示磁盘分区上的可使用的磁盘空间- -h:同上
- -P:不换行显示
- -i:显示inode使用情况
-
设备文件:
- b:按块为单位,随机访问的设备;如:硬盘
- c:按字符为单位,线性设备 如:键盘
- 创建设备文件:
mknod
-
硬盘设备的设备文件名:
IDE、ATA:以hd开头
SATA(Serial ATA):sd开头
SCSI:sd开头
USB:sd开头同一类型下的不同设备用a,b,c区别
分区:1-4表示主分区,5以后的数字代表逻辑分区 -
查看当前系统识别了几块硬盘:
fdisk -l
后接具体硬盘名,可以查看特定硬盘信息输入fdisk 会出来交互式界面--Ctrl和删除键连用可以删除刚输入的参数 p:显示当前硬件的分区,包括没保存的改动 n:创建新分区 e: 扩展分区(extended) p: 主分区(primary) d:删除一个分区 w:保存退出 q:不保存退出 t:修改分区类型 L: 跟在t后使用,显示所支持的所有类型 # 如改为swap需要,L命令,输入Linux swap / Solaris 的编码(82)
用这种方法创建完新分区后,此时内核仍未识别,
cat /proc/partitions
查看分区列表,
重读添加新建的分区,用partprobe /dev/sda
命令;之后才能进行高级格式化 -
Linux 下的VFS
VFS是虚拟文件系统(Virtual Filesystem Switch),也存在内核空间中虚拟,是因为它所有的数据结构都是在运行以后才建立,并在卸载时删除,而在磁盘上并没有存储这些数据结构
因此,只有与实际的文件系统,如Ext2、Minix、MSDOS、VFAT等相结合,才能开始工作 -
创建文件系统
mkfs: make file system
-
cat /proc/filesystems
查看当前内核所支持的文件系统类型
例如:ext2、ext3、vfat -
mkfs -t 文件类型 /dev/新建的分区
【⚠️不要对已有数据的分区创建文件系统,因为此操作等于快速格式化】
-
mke2fs
专门挂载EXT系列文件-j:创建ext3类型文件系统; -b BLOCK_SIZE:指定块大小,默认为4096,可用取值为1024、2048或4096; # 经常存储的小文件适合用小的,大文件用大的 -L LABEL:指定分区卷标,有了卷标,下次重新开机多个挂载的硬件设备次序不会乱,且可用卷标来引用该分区; -m <数字>:指定预留给超级用户的预留百分比,默认为5%; -N:指定inode个数;
blkid
查询设备上所采用文件系统类型、UUID等e2label
查看或定义卷标
e2label 设备文件 卷标:设定卷标
-
tune2fs
无损调整文件系统的相关属性-j:不损害原有数据,将ext2升级为ext3;# 块大小属性不能更改 -L LABEL:设定或修改卷标; -o:设定默认挂载选项;acl -m <数字>:调整预留给超级用户的预留百分比; -C <数字>:每挂载n天后进行自检,0或-1表示关闭此功能。
fsck
检查并修复LINUX文件系统
-t FSTYPE:指定文件系统类型
-a 自动修复
e2fsck
专门检查并修复EXT2、EXT3文件系统
-p:自动修复;-f:强制修复
-
- 挂载与卸载
挂载:将新的文件系统关联至当前根文件系统
卸载:解除某文件系统与当前根文件系统的关系
格式化硬盘后,使用mount
mount 设备 挂载点
设备:
设备文件:/dev/sda5
卷标:LABEL=""
UUID:UUID=""
挂载点:即目录
要求:
1.此目录没有被其他进程使用;
2.目录事先存在;
3.目录中的原有文件将会暂时隐藏;
# 挂载完成后,要通过挂载点访问对应系统上的文件
mount -a 挂载所有/etc/fstab中的设备
卸载用unmount
umount 设备
umount 挂载点
注意:挂载的设备没有进程使用;
-
物理内存和交换空间使用情况
swap交换空间:
由于进程某段时间内过多,导致系统的物理内存不够用的时候,如果没有多余进程存放位置,主机有可能会宕机。因此~物理内存会寻找一些很长时间没有什么操作的程序, 将他们的内存使用空间移动到硬盘中的一块位置上。这块为了内存应急的空间就是swap。
【当那些被释放的出来的程序要运行时,再从硬盘Swap分区中恢复保存的数据到内存中】free
来查看-h:human-readable
-
创建swap
-
fdisk /dev/sda
创建新分区,格式化的时候调整分区类型为82(Linux swap)【不调整,默认使用83Linux】
partprobe /dev/sda
重读分区 -
mkswap /dev/sda8 -L LABEL
进行格式化,指定卷标LABEL -
swapon /dev/sda8
启动交换分区 【关闭用swapoff】
-
dd 比cp更强大的复制命令
# cp是以文件为单位进行复制的;
# dd直接复制的文件代码,因此可以复制文件的一部分
if=数据来源 【input file】
of=数据存储目标 【output file】
bs=1 一次复制多少字节 【指定单位:bs=1M】
count=2 一共复制几次
dd复制备份MBR:
# 复制硬盘最开始的512的字节,那也就是核心程序MBR
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
# 恢复
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1
-
文件系统配置文件
文件系统的配置文件
/etc/fstab
:系统在初始时,会自动挂载此文件中定义的每个文件系统,文件内容从左到右为:要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率 文件系统检测次序 /dev/sda5 /mnt/test ext3 defaults 0 0 #转储频率<数字>(每多少天做一次完全备份,0表示不备份)
#文件系统检测次序(只有根可以为1,0表示不检查) -
fuser
验证进程正在使用的文件-v:查看某文件上正在运行的进程 fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程
欢迎关注我们的公众号~_~
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到[email protected]