为了更好的管理数据,类似于家庭为什么要有卧室 卫生间 厨房 客厅。
/dev 设备目录
/dev/hda[a-z] IDE硬盘
/dev/sda[a-z] SATA接口硬盘/U盘
/dev/cdrom 光驱
[root@web01 ~]# blkid ##查磁盘分区相关信息
主分区特点小结:
1)是系统中必须要存在的分区,系统盘一般会选择主分区安装系统。
2)分区数字编号只能是1-4,例如:SCSCI分区名为sda1、sda2、sda3、sda4。
3)主分区最多四个,最少一个。
扩展分区(Extend)小结
1.不能直接存放数据,必须要再分逻辑分区
2.一块磁盘最多1个扩展分区
3.主分区+扩展分区总的数量不能超过4个
fdisk命令原理
—> 修改mbr主引导信息中的64字节分区表
----> 使用fdisk分区,源数据还存在于磁盘
为什么只能四个?
分区表64字节, 一个分区表占用16字节---->> 主分区加扩展分区小于4个
(虚拟机操作)
fdisk /dev/sdb
n 新建一个分区 m for help p 主分区 e 扩展分区 p 打印分区信息 d 删除分区 w 保存分区信息 q 退出不保存分区信息 Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28 Device Boot Start End Blocks Id System Command (m for help): Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-2097151, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +100M Partition 1 of type Linux and of size 100 MiB is set #重复曹组创建3个分区..... Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28 Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 616447 204800 83 Linux /dev/sdb3 616448 1230847 307200 83 Linux Command (m for help): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): e #添加拓展分区 Selected partition 4 First sector (1230848-2097151, default 1230848): Using default value 1230848 Last sector, +sectors or +size{K,M,G} (1230848-2097151, default 2097151): Using default value 2097151 Partition 4 of type Extended and of size 423 MiB is set Command (m for help): n # 添加逻辑分区logical All primary partitions are in use Adding logical partition 5 First sector (1232896-2097151, default 1232896): Using default value 1232896 Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +500M Value out of range. Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +100M Partition 5 of type Linux and of size 100 MiB is set Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x00097e28 Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 616447 204800 83 Linux /dev/sdb3 616448 1230847 307200 83 Linux /dev/sdb4 1230848 2097151 433152 5 Extended /dev/sdb5 1232896 1437695 102400 83 Linuxw保存以后,分区表已经改了,内核还不知道
通知内核分区表已经修改。
[root@oldboy ~]# partprobe /dev/sdb
前面我们已经提到过,如果需要使用磁盘的空间,需要准备一个空的目录作为挂载点,与该设备进行关联。
mount主要是为文件系统指定一个访问入口。
PS: 类似我的商场没有门,那么就无法进入购买商品,此时通过mount命令可以创建一个入口。给超市安装一个门。如图:
1.通过mount进行挂载,但重启将会失效。我们称为临时生效。
可以使用umount进行卸载。
查看磁盘分区命令
lsblk (-f 查看文件系统格式)
df -h
cat /proc/partitions
PS: 生产分区建议,如无特殊需求直接使用整个磁盘即可,无需分区。
创建个目录进行分别挂载!!
fdisk /dev/sdb #分区 P(1-4) + E–>L(5,6)
mkdir /data1 #创建目录
mkfs.ext4 /dev/sdb5 #格式化分区
blkid #查看那uuid
/dev/sdb5: UUID=“628b308b-e742-4824-8e21-9060f6e80ee7” TYPE=“ext4”
** **
[root@container ~]# **vim /etc/fstab** #挂载设备
UUID=6eefe97b-7876-4632-9550-5dd8cd81eef4 /data1 xfs defaults 0 0
[root@container ~]#mount -a #重载/etc/fstab中的 挂载信息,可提示错误
[root@container ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 20G 33M 20G 1% /data1 《–读取/etc/fstab 加载该设备
或者:
echo " mount /dev/adb1 /data1" >> /etc/rc.local
要挂载的设备 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查
/dev/sdb1 /db1 xfs defaults 0 0
第一列:可以使用UUID [root@container ~]# blkid /dev/sda1: UUID="723eb45d-9a1b-4e8f-b06d-cf9024302147" TYPE="xfs" /dev/sda2: UUID="yVHSU3-Cmkf-qsg9-6DNg-P87L-mCDN-VOHvcO" TYPE="LVM2_member" /dev/sdb1: UUID="3b0143a3-39af-4991-afab-01227fbe767c" TYPE="xfs" 第五列:是否进行备份。通常这个参数的值为0或者1 选项 含义 0 代表不做备份 1 代表要每天进行备份操作 2 代表不定日期的进行备份操作 第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整 选项 含义 0 不要检验磁盘是否有坏道 1 检验 2 校验 (当1级别检验完成之后进行2级别检验)前面我们已经了解到fdisk分区
但fdisk不支持给高于2TB的磁盘进行分区。
如果有单块盘高于2TB,,用parted工具修改分区表格式就可以分区了,使用parted工具分区
1、能够识别大于2TB的磁盘存储空间
2、MBR <<---->> GPT分区表格式间互相转换、会造成数据丢失
parted命令中MBR分区被称作msdos,其它分区如下:
aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop
parted 修改分区会直接生效
练习
1)parted -l #查看磁盘信息。 2)开始分区 [root@oldboy /mnt]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) 3)修改分区表格式 在进行mbr转gpt时,硬盘的数据会被清除,需要提前备份。 mbr的硬盘转换成gpt,使用如下命令 mklabel gpt p 删除: (parted) rm 1 (parted) rm 2 创建分区 mkpart logical 1 10 #<==创建逻辑分区,大小10MB。 mkpart primary 11 20 #<==创建主分区,大小10MB。 mkpart primary 21 200 # 退出格式化:
mkfs -t ext4 /dev/sdc1
mkfs -t xfs /dev/sdc2
挂载:
mount /dev/sdc1 /mnt
mount /dev/sdc2 /opt
Gdisk
1、能够识别大于2TB的磁盘存储空间
2、gdisk可以支持分区的数量 高达 128个 主分区 没有扩展,逻辑分区的概念。
MBR <<---->> GPT 互相转换、会造成数据丢失
yum install gdisk -y
lsblk #查看磁盘详情
gdisk /dev/sdc
mkfs.xfs /dev/sdc
安装parted,通知内核立即生效,无需重启
partprobe /dev/sdb
mkdir /data_c
mount /dev/sdc1 /data_c/
df -h
mount -o ro /dev/sdc1 /data_c/
卸载(卸载挂载点目录名称、卸载挂载的设备名称)
[root@container ~]# umount /data_c/
[root@container ~]# umount /data_c/
强制卸载 (你进入了挂载点的目录,然后无法卸载。需要强制卸载)
[root@container data-c]# umount -lf /dev/sdc1
具有复制文件、转换文件和格式化文本的功能。
if=<输入文件>从指定文件中读取,全称input file※of=<输出文件>写入到指定文件,全称output file※bs=<字节数>一次读写的字节数,全称block size※count=<块数>指定复制block块的个数※范例1:读取MBR
[root@oldboy ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1 #<==读取0磁头0磁道1扇区内容。 [root@oldboy ~]# od -xa mbr.bin #<==以16进制解析1扇区内容。范例2:生成文件,模拟小磁盘。*****
dd if=/dev/zero of=/dev/sdb bs=1M count=10范例3:制作Linux系统的ISO镜像。
dd if=/dev/cdrom of=CentOS6_7.iso #类似cp /dev/cdrom CentOS6_7.iso 复制、镜像功能Swap分区在系统的物理内存不够时,将硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。
PS: 当物理内存不够时会随机kill占用内存的进程,从而产生oom,临时使用swap可以解决。
由于该进程非常的消耗内存,造成物理内存不够,系统会启用保护机制,干掉内存较高的程序
sync:刷新文件系统缓冲区 -----> 将文件从缓存刷新到磁盘
[root@container ~]# swapoff -a 关闭所有swap分区 [root@container ~]# free -m 查看内存空闲 total used free shared buff/cache available Mem: 972 227 433 7 312 544 Swap: 0 0 0 [root@container ~]# dd if=/dev/zero of=/dev/null bs=630M count=1000 /var/log/message 发现存在oom Mar 27 10:20:13 container kernel: Out of memory: Kill process 2123 (dd) score 629 or sacrifice child 为了避免物理内存不够用(使用swap硬盘空间来临时充当内存) [root@container ~]# swapon -a [root@container ~]# free -m #新开一个窗口,随时查看交换分区的状态 total used free shared buff/cache available Mem: 972 210 637 7 123 599 Swap: 2047 0 2047 [root@container ~]# dd if=/dev/zero of=/dev/null bs=1000M count=1000 #模拟swap被占满情况 [root@container ~]# free -m #查看 swap一但被使用,就会发现系统会越来越卡。 (分配内存,硬件空间模拟内存介质所以就很卡 )企业实战案例:java服务系统环境虚拟内存耗尽故障及解决实践
a.让开发查找程序泄露问题,这是解决问题的根本。
b.同时运维也可以临时增大一些swap大小(这个问题治标不治本,关键还是找到程序问题才行)。
c.优化内核参数,让系统尽量使用内存而不是swap(使用swap的系统会很慢),这里通过此问题引出第二个方法的解决实践,即swap分区的实践。
1.增加swap分区解决swap耗尽方案实践—>>>
1)使用普通物理分区创建swap [root@oldboyedu ~]# fdisk /dev/sdb #<==为sdb磁盘分区。 ...省略若干行... Command (m for help): n #<==创建新分区。 Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p #<==选择主分区。 Selected partition 4 #<==编号为4。 First sector (718848-2097151, default 718848): #<==默认。 Using default value 718848 Last sector, +sectors or +size{K,M,G} (718848-2097151, default 2097151): +150M #<==给150M大小。 Partition 4 of type Linux and of size 150 MiB is set Command (m for help): p #<==查看分区结果。 ...省略若干行... Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 411647 102400 83 Linux /dev/sdb3 411648 718847 153600 83 Linux /dev/sdb4 718848 1026047 153600 83 Linux Command (m for help): w #<==将分区结果写入分区表。 The partition table has been altered! ...省略若干行... Syncing disks. [root@oldboyedu ~]# partprobe /dev/sdb #<==将分区修改结果通知内核生效。 [root@oldboyedu ~]# mkswap /dev/sdb4 #<==格式化分区为swap格式。 [root@oldboyedu ~]# free -m #<==查看增加前虚拟分区大小。 total used free shared buff/cache available Mem: 1980 144 1673 19 162 1658 Swap: 917 0 767 #<==767m。 [root@oldboyedu ~]# swapon -a /dev/sdb4 #<==加载格式化好的分区到swap。 [root@oldboyedu ~]# free -m total used free shared buff/cache available Mem: 1980 144 1673 19 162 1658 Swap: 917 0 917 #<==增加了150m。 [root@oldboyedu ~]# swapoff /dev/sdb4 #<==取消增加的swap分区。 2)使用dd命令创建文件格式化swap [root@oldboy ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 #<==使用dd创建虚拟的文件系统分区。 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 0.691843 s, 194 MB/s [root@oldboy ~]# mkswap /tmp/swap #<==格式化分区为swap格式。 Setting up swapspace version 1, size = 131068 KiB no label, UUID=e7f3b240-6c98-4c47-93f4-623f157aa46a [root@oldboy ~]# free -m #<==查看增加前虚拟分区大小。 total used free shared buff/cache available Mem: 972 114 574 7 284 680 Swap: 1023 0 1023 [root@oldboy ~]# chmod 0600 /tmp/swap #<==为文件安全授权0600(C7会提示你执行此步)。 [root@oldboy ~]# swapon /tmp/swap #<==加载格式化好的分区到swap。 [root@oldboy ~]# free -m total used free shared buff/cache available Mem: 972 114 574 7 284 680 Swap: 1151 0 1151 [root@oldboy ~]# swapon -s #<==显示磁盘swap情况。 Filename Type Size Used Priority /dev/sda2 partition 1048572 0 -2 /tmp/swap file 131068 0 -3 [root@oldboy ~]# swapoff /tmp/swap #<==测试完毕,卸载。 2.让系统优先使用物理内存而不是swap [root@oldboy ~]# cat /proc/sys/vm/swappiness #<==默认值。 30 编辑内核文件sysctl.conf,加入vm.swappiness = 5,配置过程如下。 [root@oldboy ~]# tail -1 /etc/sysctl.conf #<==查看编辑后的内容。 vm.swappiness=5 [root@oldboy ~]# sysctl -p #<==价值内核参数配置生效。 vm.swappiness = 5 #<== swappiness=0时,系统会最大限度使用物理内存,如果内存不足,扔会占用swap分区,swappiness=100时,系统会积极使用swap分区,并且把内存上数据及时加载到swap里。CentOS7默认设置为30。 [root@oldboy ~]# cat /proc/sys/vm/swappiness #<==通过proc来查看更改结果。 10 [root@oldboy ~]# echo 5 >/proc/sys/vm/swappiness #<==也可以直接这样调整,然后将命令加载到rc.local文件里。 3.直接清空swap分区数据和缓存数据 [root@oldboy ~]# sync #<==将缓冲区数据写入磁盘(强制将block数据写入磁盘,更新超级块)。 [root@oldboy ~]# echo 1 > /proc/sys/vm/drop_caches #<==清空cache缓存区。 [root@oldboy ~]# cat /proc/sys/vm/drop_caches 1 [root@oldboy ~]# swapoff -a #<==关闭swap分区。 [root@oldboy ~]# swapon -a #<==重启开启swap分区。特别提示:parted分区工具分区实时生效
简单地说,文件系统就是一种存储和组织计算机中数据文件的机制或方法,
它使得对计算机内的数据的存储、访问和查找变得更容易、简单。
如ext3(CentOS5.x)、ext4(CentOS6.x)、xfs(CentOS7.x)、zfs
和Reiserfs或FAT、NTFS等都是常见文件系统。
mkfs -t 指定文件系统类型(mkfs.ext4,mkfs.xfs) ----或mkfs. 指定
fsck:检查并修复Linux文件系统
三要素:
1.处于非挂载状态。
2.没有问题的磁盘不要执行。
3.执行fsck前尽量备份。
