磁盘
1.磁盘的组成:盘片,机械手臂,磁头,主轴马达。盘片分为柱面(Cylinder)和扇区(Sector),每个扇区大小为512bytes。
2.磁盘的第一个分区记录内容:
(1)主引导分区(Master Boot Record,MBT):安装引导加载程序,446bytes。
(2)分区表:记录整块硬盘分区的状态,46bytes。
分区
1.mbr分区表使用fdisk分区
fdisk使用m作为提示指令,fdisk有时会使用柱面作为分区的最小单位
partprobe [-s] ##更新linux核心的分区信息
2.按生产标准定制分区
(1)分区的实质(原理):给磁盘按照柱面为单位划分为不同的块(给一个分区指定不同的柱面数来分成不同的分区数)。柱面为分区的最小单位。
(2)分区之后需要给分区格式化,分区格式化的原理是:把分区变成可以存储数据的格式。
(3)磁盘分区有主分区(可直接使用)、扩展分区(不可直接使用,划分为逻辑分区可使用)、逻辑分区之分。一块磁盘最多有四个主分区(原因:主分区表只有64bytes,每个主、扩展分区各要占用16bytes),其中一个主分区的位置可以用扩展分区替换,一块硬盘只能有一个扩展分区,这个扩展分区可以有多个逻辑分区。
3P+E
2P+E
P+E
4P 不能增加分区
(4)磁盘分区的设备名
通过设备名来访问设备,设备名存放在“/dev”目录中
设备名称如下:
系统的第一块IDE接口的硬盘称为/dev/hda(系统的第一块SCSI接口硬盘的第1个分区为/dev/sda1;)
二 /dev/hdb;
三 /dev/hdc;
系统的第一块IDE接口硬盘的第1个分区为/dev/hda1;
系统的第一块IDE接口硬盘的第2个分区为/dev/hda2。
注意:
①分区数字编号1~4留给主分区和扩展分区使用,逻辑分区编号只能从5开始;
②IDE硬盘设备名均以/dev/hd开头,不同硬盘编号依次为/dev/hda、/dev/hdb、/dev/hdc。
③SCSI、SAS、SATA、USB硬盘设备名均以/dev/sd开头,不同硬盘编号依次为/dev/sda、/dev/sdb、/dev/sdc。
④SAS、SATA为当前2010-2012互联网生产环境主流硬盘接口,SSD是主流硬盘接口,逐渐被应用。
性能:SSD(电子设备)>SAS(机械硬盘)>SATA(同样的价钱容量从大到小,则顺序相反)
线上服务器中,SAS是主流。
⑤Linux中常用的外部设备文件名
软盘 /dev/fdN(N=0,1,2...)
光驱(IDE) /dev/cdrom(→/dev/hdX)
光驱(SCSI) /dev/scdN(N=0,1,2...)
硬盘(IDE) /dev/hdX(X=a,b,c...)
硬盘(SCSI) /dev/sdX(X=a,b,c...)
U盘 /dev/sdX(X=a,b,c...)
3.Linux系统对分区的要求
(1)至少有/和swap(交换分区)分区(必须有一个根分区)
(2)交换分区的作用:虚拟内存(内存不够用了,通过虚拟内存进行缓存)
大小参考值为1.5倍的物理内存容量。内存大于8GB,swap大小可以等于物理内存;内存为16GB、32GB或更高,swap可在8~16GB。
数据库使用swap会变慢。如果不分swap,内存被用完会宕机。
若发现swap被用了很多,内存有剩余,则说明程序有漏洞(内存泄漏)。处理方式为:找程序。
(3)建议设置独立的/boot分区
Linux引导分区,存放系统引导文件(如Linux内核等),所有文件大小一般只有几十兆欧。故该分区一般设置为100~200M。
设备的查看
1.发现系统中的设备
(1)fdisk -l
(2)cat /proc/partitions
2.系统发现的,但是没有投入使用 随时可以使用的
blkid ##查看设备的id信息
3.正在使用的设备
df -h ##1g=2^n (更精确)
df -H ##1g=10^n
设备名称的读取
1./dev/xd*
x=s /dev/sd* ##sate硬盘,或者iscsi网络存储
x=v /dev/vd* ##虚拟硬盘,一般出现在虚拟机里
x=h /dev/hd* ##ide硬盘 ,一般出现在老式电脑里
*=a~... ##/dev/vda, 系统中的第一块虚拟硬盘
/dev/sda1 ##系统中的第一块sate硬盘的第一个分区
2./dev/cdrom,/dev/sr[0-…] ##系统中的光驱
3./dev/mapper/* ##系统中的虚拟设备
设备的使用
设备必须使用目录来对设备中的内容进行读取
所以设备在使用时需做挂载动作
1.blkid ##查看可使用的设备
[root@localhost ~]# blkid
/dev/sda1: UUID="40486AB4486AA87C" TYPE="ntfs"
. . . . . .
/dev/sdb1: LABEL="HP v285w" UUID="9B03-2CED" TYPE="vfat" ##插入的u盘
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 266049616 23050072 242999544 9% /
. . . . . .
/dev/sdb1 31020992 2913408 28107584 10% /run/media/kiosk/HP v285w ##u盘挂载位置
2.mount 设备 挂载点 ##挂载设备(挂载在一个目录后 可查看设备里的内容 不能查看原来目录里的东西)
mount -o ro 设备 目录 ##-o,指定动作,ro表示read only
mount -o ro /dev/sdb1 /mnt/
注意:当卸载设备时出现下列情况
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
(1)进程发现的方式
[root@localhost ~]# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 20071 ..c.. bash
root 20720 F.c.. vim
或者
[root@localhost ~]# lsof /dev/sdb1
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 20071 root cwd DIR 8,17 16384 1 /mnt
vim 20720 root cwd DIR 8,17 16384 1 /mnt
vim 20720 root 3u REG 8,17 12288 3096 /mnt/.file.swo
(2))关闭进程的方法
[root@localhost ~]# fuser -kvm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 15647 ..c.. bash
root 20021 F.c.. vim
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 266049616 23050820 242998796 9% /
devtmpfs 1868044 0 1868044 0% /dev
tmpfs 1881152 516 1880636 1% /dev/shm
tmpfs 1881152 9016 1872136 1% /run
tmpfs 1881152 0 1881152 0% /sys/fs/cgroup
/dev/sda2 505580 149488 356092 30% /boot
/dev/loop0 3947824 3947824 0 100% /var/www/html/rh7.2
/dev/loop1 3947824 3947824 0 100% /rh7.2
tmpfs 376232 20 376212 1% /run/user/1000
或者
kill -9 pid
[root@localhost ~]# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 20071 ..c.. bash
[root@localhost ~]# kill -9 2007
-bash: kill: (2007) - No such process
[root@localhost ~]# kill -9 20071
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df
分区的划分
分区小结:
mbr分区,最大分区为2TB
主分区:由分区表记录的分区
扩展分区:解决分区不足,分出逻辑分区
逻辑分区:在扩展分区中的分区,由扩展分区记录
mbr + 55aa (2个字节,硬盘有效性标示,类似于目录)+mpt (主分区表64字节)=512bytes
一个主分区占用主分区表16个字节记录分区信息
1.fdisk -l 查看分区
2.创建分区
fdisk /dev/vdb
Command (m for help): n ##创建分区
Partition type:
p primary (0 primary, 0 extended, 4 free) ##主分区
e extended ##扩展分区
Partition number (1-4, default 1): 1 ##确认主分区id
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 ##保存分区操作并退出
分区之后
cat /proc/partitions ##查看设备是否被识别
mkfs.xfs /dev/vab1 ##格式化设备,在设备上添加xfs文件系统
blkid ##查看可用设备,可以看到被格式化好的设备
mount /dev/vab1 /mnt/ ##挂载设备,使设备投入使用
partprobe ##同步分区表
文件系统:
ext 分布式文文件系统,稳定
ext2-3 可支持32TB的分区
ext4 可支持1EB的分区
vfat 可支持4TB,链式文件系统,稳定性差
ntfs 可支持32TB的分区,链式文件系统,稳定性差
xfs 可支持18EB的分区,吞吐速度7GB/S
设备永久挂载
vim /etc/fstab
设备 挂载点 文件系统类型 挂载参数 是否备份 是否检测磁盘是否完整,数据是否有问题
/dev/vdb1 /mnt/ xfs defaults 0 0
mount -a ##让fstab中未生效的策略生效
删除分区
注意:正在使用的设备不能删除
vim /etc/fstab ##删掉之前的挂载
mount -a ##让fstab中未生效的策略生效
umount /mnt/ ##取消挂载
df ##查看挂在点
然后fdisk /dev/vdb
Command (m for heip):d ##删除分区/dev/vdb1
swap分区的管理
1.swap 交换分区,系统自己使用,不需要挂载
2.swap分区的建立
先建立分区
然后将分区的id改为swap类型
Command (m for help)t ##修改分区id
Hex code (type l to list all codes):l ##列出所有的id类型代码
Hex code (type l to list all codes):82 ##把/dev/vdb1的分区类型改为swap,swap类型代码为82
vim /etc/fstab
/dev/vdb1 swap swap defaults 0 0
mkswap /dev/vdb1 ##格式化/dev/vdb1为swap文件系统格式
swapon -a /dev/vdb1 ##激活swap设备,将新建的swap投入使用
swapon -s ##同cat /proc/swaps,列出目前使用swap的设备有哪些
swapoff /dev/vdb1 ##关闭系统使用/dev/vdb1
3.当磁盘全部被用完不能创建新分区时,可以使用文件来代替分区
dd if=/dev/zero of=/swapfile bs=1M count=1000
此文件创建后的步骤和设备的步骤一致
注意:
新建分区时,我们会遇到Command (m for help),输入m即可查看参数的使用方法,如下所示:
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
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
u change display/entry units
v verify the partition table
w write table to disk and exit ##将当前操作写入硬盘分区
x extra functionality (experts only)
删除swap分区
vim /etc/fstab ##删除swap的配置
swapoff /dev/vdb1 ##停止/dev/vdb1设备的使用
swapoff /swapfile ##停止/swapfile设备的使用
rm -rf /swapfile ##删除swap分区
fdisk /dev/vdb ##fdisk命令删除分区
注意:
rm -rf /dev/vdb1是删除/dev/vdb1设备文件,恢复方法为:
mknod /dev/vdb1 b 253 17
mknod ##用于新建字符设备文件和块设备文件
-z ##设置安全的上下文
-m ##设置权限模式
-help ##显示帮助的信息
--version ##显示版本的信息
b ##创建块(缓冲)文件
c,u ## 创建字符(非缓冲)文件
p ##创建一个先进先出,先入先出
磁盘配额
为磁盘使用用户分配额度
分区配额是针对设备的
1.激活设备参数
mount -o usrquota /dev/vdb1 /westos/
chmod 777 /westos/
edquota -u student /dev/vdb1
Disk quotas for user student(uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/vdb1 204800 0 204800 1 0 0
存在文件的大小 软额度 最大额度 文件个数 软额度 最大额度
测试:
su student
dd if=/dev/zero of=/westos/file bs=1M count=600
##student用户的配额限度是200M,然后在/westos下切割一个400M的文件
开机自动激活配额
vim /etc/fstab
/dev/vdb1 /westos xfs defaults,userqutoa 0 0
分区方式修改 mbr<—->gpt
gpt的优点:解决mbr分区只有2TB,不能满足使用的缺点。最多支持128个分区
mbr–>gpt:
[root@203server ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel ##修改设备分区方式标签
New disk label type? gpt ##把原有的dos标签改为gpt(双击Tab可查看所有的设备分区方式标签)
Warning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will be
lost. Do you want to continue?
Yes/No? yes
(parted) q
Information: You may need to update /etc/fstab
分区方式检测:
[root@203server ~]# fdisk -l
Disk /dev/vda: 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: 0x00013f3e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 20970332 10484142+ 83 Linux
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/vdb: 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: gpt
Start End Size Type Name
[root@203server ~]#
luks加密
文件与文件系统的关系:文件存储在文件系统中,文件系统存储在磁盘上;文件系统是管理文件的软件。
luks加密的原理:在文件与文件系统之间加密(相当于在文件与文件系统之间加上锁),当文件被人经过文件系统取出文件时,取出的文件仍然是加密的无法使用文件。
1.新建分区
2.加密格式化
cryptsetup luksFormat /dev/vdb1 ##对/dev/vdb1进行加密
[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 ~]#
3.cryptsetup open /dev/vdb1 westos ##生成加密使用的锁,westos是随意命名的
[root@localhost ~]# cryptsetup open /dev/vdb1 westos
Enter passphrase for /dev/vdb1:
[root@localhost ~]#
4.mkfs.xfs /dev/mapper/westos ##将生成的锁格式化为xfs并投入使用
5.mount /dev/mapper/westos /mnt/ ##挂载设备
touch /mnt/westosfile{1..5}
6.umount /mnt/ ##卸载/mnt/
cryptsetup close westos ##关闭锁
7.cryptsetup open /dev/vdb1 westos
mount /dev/mapper/westos /mnt/
加密设备开机自动挂载
[root@localhost ~]# vim /etc/fstab
/dev/mapper/westos /mnt xfs defaults 0 0
[root@localhost ~]# vim /etc/crypttab
westos /dev/vdb1 /root/passfile
[root@localhost ~]# vim /root/passfile
2017westos
[root@localhost ~]# chmod 600 /root/passfile
[root@localhost ~]# cryptsetup luksAddKey /dev/vdb1 /root/passfile
Enter any passphrase: ##输入/etc/passfile编辑的内容,即加密的密码
[root@localhost ~]#
清除加密
[root@localhost ~]# umount /dev/mapper/westos ##卸载生成的锁
umount: /dev/mapper/westos: not mounted
[root@localhost ~]# cryptsetup close westos ##关闭锁
[root@localhost ~]# mkfs.xfs /dev/vdb1 -f
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# vim /etc/fstab ##清除编辑的内容,还原文件
[root@localhost ~]# vim /etc/crypttab ##清除编辑的内容,还原文件
[root@localhost ~]#rm -rf /root/passfile