一、磁盘管理
硬盘可分为主引导扇区,主分区,扩展分区。
磁盘分区表DPT(disk partition table)共64字节,平均分成4份,每份16字节,保存分区起始位置,最多可以创建4个主分区。
但是有时4个不够用,所以一般将第四块分区设置为扩展分区,扩展分区最多有一个,可以划分成多个逻辑分区。
它是一个指向下一个分区的指针,这种指针结构形成一个单向列表。通过这个分区的指针,可以找到所有的逻辑分区。
每个主分区只能分成一个驱动器,每个主分区都有各自独立的引导块(PBR),可以用fdisk设定为启动区
扩展分区上可以划分出多个逻辑驱动器,这些逻辑驱动器没有独立的引导块,不能用fdisk设定为启动区。
1、fdisk命令
fdisk -l #查看当前磁盘信息
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000a4d9c
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20971519 9972736 8e Linux LVM
sda1 #a表示第一块磁盘,磁盘数用字母表示,1表示第一个分区,分区数用数字表示
fdisk /dev/sda #表示对第一块磁盘分区
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): m #m查看各种命令
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition #删除分区
g create a new empty GPT partition table #GPT(GUID partition table)全局唯一标识分区表
G create an IRIX (SGI) partition table
l list known partition types #列出系统可用的分区类型
m print this menu
n add a new partition #新建分区
o create a new empty DOS partition table
p print the partition table #显示分区
q quit without saving changes #不保存,退出
s create a new empty Sun disklabel
t change a partition's system id ##修改分区功能类型,l可查看所有选项
u change display/entry units
v verify the partition table
w write table to disk and exit #保存更改到分区表中
x extra functionality (experts only)
创建分区
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): #p表示主分区,e表示扩展分区,默认是主分区
Using default response p
Partition number (1-4, default 3): #主分区id,因为已经有两个主分区,所以默认为3
First sector (2048-20971519, default 2048): #设置分区起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +100M #分区大小
Partition 1 of type Linux and of size 100 MiB is set
Command (m for help): wq #wq保存并退出
新建分区之后,同步分区表
[root@localhost mnt]# partprobe #同步分区表
[root@localhost Desktop]# cat /proc/partitions #查看系统识别的分区信息
major minor #blocks name
2 0 4 fd0
8 0 10485760 sda
8 1 512000 sda1
8 2 9972736 sda2
11 0 3655680 sr0
253 0 8921088 dm-0
253 1 1048576 dm-1
新创建的分区必须得设置一种文件系统才能使用,就是用某种文件系统格式化分区
linux系统用ext文件格式
[root@localhost Desktop]# mkfs.ext4 /dev/sdb3
mkfs mkfs.ext2 mkfs.fat mkfs.vfat
mkfs.btrfs mkfs.ext3 mkfs.minix mkfs.xfs
mkfs.cramfs mkfs.ext4 mkfs.msdos
格式化之后,挂载到某个目录下,对那个目录操作,就相当于对这个分区操作
mount /dev/vdb3 /mnt #临时挂载
或者写入fstab中,开机挂载
vim /etc/fstab
/dev/vdb3 /mnt ext4 defaults 0 0
mount -a #挂载fstab中的所有设置
2、swap分区
Swap空间是当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
那些被释放的空间来自一 些长时间没有使用的程序,这些程序被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
fdisk /dev/vdb
Command (m for help): t #修改分区功能
Partition number (1,2, default 2): #选择分区
Hex code (type L to list all codes): 82 #l列出选项,swap类型编号是82
设置完成后记得保存
Command (m for help): wq
将有swap标识的分区格式化为swap空间
mkswap /dev/vdb2
开启、关闭swap空间
swapon -a /dev/vdb2 #-a 表示开启全部的swap空间
永久挂载
vim /etc/fstab
/dev/vdb2 swap swap defaults 0 0
swapon -s #查看所有开启的swap空间
swapoff /dev/vdb2
3、磁盘加密
磁盘加密是在设置文件系统之前进行加密,使密码不能被强制破解
先用fdisk 创建一个分区/dev/sdb1
然后对sdb1加密
[root@localhost ~]#cryptsetup luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES ##必须是大写
Enter passphrase: #输入密码
Verify passphrase:
解锁与挂载
[root@localhost ~]#cryptsetup open /dev/vdb1 redhat #将sdb1解锁为redhat
Enter passphrase foR /dev/vdb1: #输入密码
mkfs.xfs /dev/mapper/redhat #格式化解锁后的分区redhat,而不是/dev/sdb1
mount /dev/mapper/redhat /mnt #挂载分区
2.加密磁盘的永久挂载
vim /etc/crypttab #确定磁盘解密后的名字
redhat /dev/vdb1 /root/passwd
解密后设备管理文件 磁盘分区 加密磁盘密码存放文件
vim /root/passwd #只存放加密磁盘的密码
保存退出后,修改这个文件的权限为600
chmod 600 /root/passwd
cryptsetup luksAddKey /dev/vdb1 /root/passwd #关联设备和密码
最后在开机挂载列表里写入
vim /etc/fstab
/dev/mapper/redhat /mnt xfs defaults 0 0
解除开机挂载
> /etc/crypttab #清空这个文件
rm -fr /root/passwd #删除存放密码的文件
vim /etc/fstab #在文件中删除相关数据
关闭加密分区,注意操作对象是redhat,而不是vdb1
umount /dev/mapper/redhat #卸载分区
cryptsetup close/dev/mapper/redhat #关闭分区
清除加密
mkfs.ext4 /dev/vdb1 #格式化分区
4、lvm
LVM(Logical volume Manager)是逻辑卷管理的简称。
可以实现对磁盘的动态管理,也可以用不同磁盘的空间来共同创建逻辑分区
PV (Physical Volume) 物理卷
VG (Volume Group) 卷组
LV (Logical Volume) 逻辑卷
PE (Physical Extend) 物理拓展
PE是逻辑卷管理的基本单位,LVM磁盘管理中PE的默认大小是4M
步骤:
先将硬盘格式化为pv,意思就是将硬盘格式化成pe类型的一个个小块。
然后将pe组成一个vg,就是将许多pe合起来创建一个卷组vg。
最后在vg卷组中创建lv,lv大小伸缩取决于他所在的卷组的大小。
lv经过格式化之后就可以使用了,lv大小为pe的整数倍
lv的扩充缩减实际上就是增加或减少组成该lv的pe数量,不会丢失原始数据
创建逻辑卷
创建pv
pvcreate /dev/sdb2
pvs #查看创建的pv
创建vg
[root@desktop1 ~]# vgcreate qagroup /dev/sdb2
vgs #查看创建的vg
创建lv
[root@desktop1 ~]# lvcreate -n qa -L 2G qagroup
lvs #查看创建的lv
创建之后的设备信息存放在以下三个文件,后两个是第一个的链接文件
/dev/qagroup/qa
/dev/mapper/qagroup-qa
/dev/mapper/qagroup/qa
最后一步,格式化lv,挂载,使用
mkfs.ext3 /dev/qagroup/qa
临时挂载
mkdir /mnt/qa
mount /dev/qagroup/qa /mnt/qa
永久挂载
vim /erc/fstab
mount /dev/mapper/qagroup-qa /mnt/qa ext3 defaults 0 0
删除逻辑卷
与创建逻辑卷步骤正好相反
卸载挂载的逻辑卷
umount /mnt/qa
或者
umount /dev/mapper/qagroup/qa
删除逻辑卷
lvremove /dev/qagroup/qa
删除卷组
vgremove /dev/qagroup
删除物理卷
pvremove /dev/sdb2
逻辑卷和卷组的扩展和缩小
注意逻辑卷大小改变时,文件系统的大小也要随着一起更改
逻辑卷拉伸时,文件系统是在其后扩展的
lvextend -L 3G /dev/qagroup/qa #或者+1G
resize2fs /dev/qagroup/qa #重新分配文件系统
逻辑卷缩小时,要先缩小文件系统
e2fsck -f /dev/qagroup/qa # 使用 e2fsck 命令检查我文件系统
resize2fs /dev/qagroup/qa 2G #使用 resize2fs 命令缩小文件系统为2G
lvreduce -L 2G /dev/qagroup/qa #或者-1G
卷组拉伸,先创建一个物理卷pv
pvcreate /dev/vdb3
vgextend qagroup /dev/vdb3
卷组缩小,先将所要删除物理卷的文件移动到别的物理卷中,再删除物理卷
pvmove /dev/vdb3 /dev/vdb2 #将vdb3中正在使用的空间内容移动到vdb2
vgreduce qagroup /dev/sdb3
pvremove /dev/sdb3 #删除物理卷vdb3
二、计算机的启动过程
计算机启动的过程:
1. 通电后,内部电路加载BIOS(这一步有些是硬件自动完成的)
basic input output system 基本输入输出
它保存着计算机最重要的基本输入输出的程序 、开机后自检程序和系统自启动程序。
BIOS是一个写入到硬件上的一个软件程序,是开机的时候计算机系统会主动执行的第一个程序。
BIOS完成计算机自检(检测并初始化硬件,将硬件置为已知状态),并尝试识别可引导设备(光盘、硬盘、U盘、网络等),通常是硬盘。
BIOS只会把可引导设备的第一个扇区(512字节,称为主引导扇区)读入内存0x7c000的位置,并跳转(jmp)到0x7c000的位置开始执行其中的代码。
这512字节分为3个部分:1、主引导记录MBR(446字节),2、磁盘分区表DPT(64字节),3、结束标志(2字节),值为AA55,存放时低位在前。
~MBR(Master Boot Record),即硬盘的主引导记录,是放置引导加载程序的地方,引导加载程序就是bootloader
~bootloader是在操作系统内核运行之前运行的一段小程序,作用就是加载os(operating system,操作系统)到内存中,并开始执行os的代码,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
~bootloader不只可以在磁盘的第一个扇区的MBR中,也可以在主分区的开始的地方,称为PBR(Partition Boot Record),占用扇区大小不定,所在扇区叫做当前分区的boot sector。开始执行bootloader,rhel7.0是grup文件,选择操作系统以确定/boot启动分区的位置,然后加载内核,grup引导阶段结束,进入内核引导阶段。
bootloader生命周期:
(1)提供菜单:用户可以选择不同的启动选项,这也是多重引导的重要功能!选择不同的内核来启动。
(2)加载内核文件:直接指向可启动的程序区段来开始操作系统。
(3)转交其他loader:将引导装载功能转交给其他loader负责。可以加载其他boot sector内的boot loader。
~常见的boot loader有linux下的grub,windows的bootmgr,NTload等。
grub 会对软硬件环境进行基本设置,将 CPU 从实模式切换到保护模式。
实模式和保护模式参考(http://blog.csdn.net/sx154893743/article/details/12378053)。内核引导阶段,内核继续设置分段、分页、初始化中断、内存管理,以及相关设备的驱动程序
之后内核启动系统初始化进程(init进程),第一个用户级进程开始执行。
init 进程启动后,会读取一系列脚本文件,来启动一系列服务程序(systemd),包括图形界面,最后执行 /bin/login,显示登陆界面