Linux学习之分区与文件系统
一:Linux之分区管理
1.1 :Linux分区的概念,和windows分区无特别的区别,就是为了便于管理,将一个大的盘划分为多个物理独立的片区;Linux操作系统只能划分为4个主分区,更多的分区,只能通过扩展分区来实现;何为扩展分区,可以通过查看下面的信如果需要使用息,大概了解下;下面的extended就表示扩展分区了
1.2 :创建分区
那如何创建分区呢,下面将介绍分区的创建方法
1)创建分区,首先得找到物理盘,通过如下命令可以查到物理磁盘信息(这个其实也不是真正的物理硬盘):
[root@dx-yw-prd01-vm dev]# fdisk –l
Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970cylinders
Units = cylinders of 16065 * 512 =8225280 bytes
Sector size (logical/physical): 512bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes /512 bytes
Disk identifier: 0x000cbe6c
2)创建扩展分区
[root@dx-yw-prd01-vm dev]# fdisk /dev/sda
输入m表示打印当前可以使用的命令
Command (m for help): m
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibilityflag
d delete a partition
l list known partition types
m print this menu
n add a new partition ***********
2)化扩展分区(续)
Command (m for help): n #n表示新建分区,通过帮助m可以查看
Command action
e extended
p primary partition (1-4)
e # e表示新建的分区为扩展分区,p表示创建主分区
Partition number (1-4): 3 #分区的编号(编号从1开始,0为主磁盘)
First cylinder (9116-16970, default9116):
Using default value 9116
Last cylinder, +cylinders or+size{K,M,G} (9116-16970, default 16970):
Using default value 16970
Command (m for help): w (保存退出)
The partition table has been altered!
Callingioctl() to re-read partition table.3)在扩展分区上创建逻辑分区
[root@dx-yw-prd01-vm dev]# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970cylinders
Units = cylinders of 16065 * 512 =8225280 bytes
Sector size (logical/physical): 512bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes /512 bytes
Disk identifier: 0x000cbe6c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinderboundary.
/dev/sda2 64 9116 72704000 8e Linux LVM
/dev/sda3 9116 16970 63094501 5 Extended
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (9116-16970, default9116):
Using default value 9116
Last cylinder, +cylinders or+size{K,M,G} (9116-16970, default 16970):
Using default value 16970
Command (m for help): w
The partition table has been altered!
1.3 :删除分区
[root@dx-yw-prd01-vm dev]# fdisk /dev/sda
Command (m for help): d
Partition number (1-4): 3
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition tablefailed with error 16: Device or resource busy.
The kernel still uses the old table.The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
1.4 :扩分区
Linux的分区创建好了以后,是无法进行扩分区的,这也是后面引入文件系统的原因;但是Linux也可以通过其他变通的方式来实现扩分区的功能,方法和windows一样,先删除,再重建,方法和1.1、1.2讲述的方法相同,此处不再重复,当然删除分区前要记得备份分区下面的数据。
1.5:分区和挂载点(目录)的关系
Linux的分区创建好了以后,是无法直接进行使用的,原因有2个:
1)分区需要格式化(如果给文件系统使用,是不需要格式化的)
2)需要挂载点
那下面讲下如何格式化分区:
Linux能够识别的分区格式为:ntfs,ext2,ext3、ext4,目前常用的分区格式为ext3
格式化命令如下:
[root@xtglgtest01-vm/]# mkfs -t ext3 /dev/sdb1
mke2fs1.41.12 (17-May-2010)
Filesystemlabel=
OStype: Linux ******等信息
[root@xtglgtest01-vm/]# mkdir bially
[root@xtglgtest01-vm/]# mount /dev/sdb1 /bially
[root@xtglgtest01-vm/]# df -h|grep bially
/dev/sdb1 7.9G 147M 7.4G 2% /bially #已经挂载成功
二:Linux之逻辑卷管理
1.1 :逻辑卷概念
逻辑卷:将一个或多个硬盘或分区在逻辑上集中,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘或者分区加入其中,这样可以实现磁盘空间的动态管理,这里的动态管理很重要,分区是不具备动态扩展的特性的,而逻辑卷可以,如果一个文件系统满了,对于分区来说是没有办法动态扩展的,而逻辑卷是可以在线动态扩展,对业务无影响。逻辑卷主要有如下概念:
PV:是物理的磁盘或者分区
VG:由多个PV组成的磁盘池
LV:在VG中划出多个逻辑的可以挂载文件系统的虚拟磁盘,也就是逻辑分区
1.2 :创建PV
VG是由多个PV组成的,PV也就是通过物理的磁盘或者分区转化而来的逻辑磁盘,磁盘或者分区第一节已经讲解了,如何创建参见第一节。创建vg的方式如下:
创建PV的方法:
[root@xtglgtest01-vm ~]# pvcreate /dev/sdb1
[root@xtglgtest01-vm ~]# pvdisplay|grep sdb1 #检查pv是否已经创建完成
"/dev/sdb1" is a new physical volume of "8.00 GiB"
PV Name /dev/sdb1
1.3 :创建VG
[root@xtglgtest01-vm ~]# vgcreate Bially_vg /dev/sdb1 #Bially-vg为创建的VG名称,/dev/sdb1 为创建的PV
Volume group "Bially_vg" successfully created
那如过发现创建错误了,需要删除时,则进行如下操作:
1.4 :删除vg和pv
[root@xtglgtest01-vm ~]# vgremove Bially_vg
Volume group "Bially_vg" successfully removed
[root@xtglgtest01-vm ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped
1.5 :创建LV
那讲了如何创建VG,创建PV,那如何给用户来使用呢,毕竟用户使用的时候是通过文件系统来(目录)来进行使用的,下面讲如何将创建好的逻辑盘池(VG)来和文件系统进行关联。
LV:逻辑盘,这个就是和文件系统直接关联的,创建好LV(系统会自动格式化)以后,即可以挂载文件系统,操作如下:
[root@xtglgtest01-vm ~]# lvcreate -L 4G -n lv_bially Bially_vg
Logical volume "lv_bially" created
1.6 :打印LV的信息
检查lv的相关信息
[root@xtglgtest01-vm ~]# lvdisplay
--- Logical volume ---
LV Path /dev/Bially_vg/lv_bially
LV Name lv_bially
VG Name Bially_vg
LV UUID 4WoOgc-tZUz-XUkI-Z2Ij-aetK-FbsG-Gah2rm
LV Write Access read/write
LV Creation host, time xtglgtest01-vm, 2015-11-25 16:50:57 +0800
LV Status available
open 0
LV Size 4.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4
通过上面的信息,可以查看lv已经创建成功,大小为4G
1.7 :挂载文件系统
1)新建挂载点目录:
[root@xtglgtest01-vm /]# mkdir -p bially
2)将新建的lv_bially逻辑卷格式化
[root@xtglgtest01-vm /]# mkfs -t ext3 /dev/Bially_vg/lv_bially #此处为lv的目#录,可以通过lvdisplay中获得
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for thesuper user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragmentsper group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912,819200, 884736
3)挂载文件系统
[root@xtglgtest01-vm /]# mount /dev/Bially_vg/lv_bially /bially
[root@xtglgtest01-vm /]# df -h |grep bially
/dev/mapper/Bially_vg-lv_bially 4.0G 137M 3.7G 4% /bially
[root@xtglgtest01-vm /]# vgdisplay
--- Volume group ---
VG Name Bially_vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
VG Size 8.00 GiB
PE Size 4.00 MiB
Total PE 2047
Alloc PE / Size 1024 / 4.00 GiB
Free PE / Size 1023 / 4.00 GiB
VG UUID G8CSMe-SPFn-STPW-t9kS-J32g-SuHm-BgiKEv
可以看到我们刚新建的VG大小本位8G,但是只创建了一个4G的lv,当然可以在线扩lv的
1.8 :在线扩文件系统(LV)
操作如下:
[root@xtglgtest01-vm /]# lvextend -L +2G /dev/Bially_vg/lv_bially
Extending logical volume lv_bially to 6.00 GiB
Logical volume lv_bially successfully resized
[root@xtglgtest01-vm /]# resize2fs/dev/Bially_vg/lv_bially
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/Bially_vg/lv_bially is mounted on /bially; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/Bially_vg/lv_bially to 1572864 (4k) blocks.
The filesystem on /dev/Bially_vg/lv_bially is now 1572864 blocks long.
[root@xtglgtest01-vm /]# df –h|grep bially
/dev/mapper/Bially_vg-lv_bially 6.0G 137M 5.5G 3% /bially
三:案例
3.1 目录空间错误导致空间不释放
一早上接到告警,提示/app空间使用率达到100%,需要紧急处理,在收到告警后,综合监控的同事第一时间知会到该系统的负责人,该负责人使用如下方式清理掉空间:
[root@huanhuaprd01 jboss-as]# rm nohup.out
-rw------- 1 root root 8395113840 11-2516:38 nohup.out
该文件大小为8G,本想删除以后空间立马恢复,但是实际空间无任何变化
[root@huanhuaprd01 jboss-as]# df -h|grep /app
29G 29G 0 100% /app
后来该负责人咨询原因,系统组同事告知删除的方法有问题,需要重启业务,才能释放空间;但是如果当我们不知道究竟哪个程序占用该文件的时候,该找到该进程呢,总能重启主机吧,Linux提供了查看文件被哪个进程占用的命令,方法如下:
[root@huanhuaprd01 ~]# lsof|grep nohup.out
run.sh 10638 root 1w REG 253,4 22190918 2091012 /app/cxbw/jboss-eap-4.3/jboss-as/nohup.out
run.sh 10638 root 2w REG 253,4 22190918 2091012 /app/cxbw/jboss-eap-4.3/jboss-as/nohup.out
java 10667 root 1w REG 253,4 22190918 2091012 /app/cxbw/jboss-eap-4.3/jboss-as/nohup.out
java 10667 root 2w REG 253,4 22190918 2091012 /app/cxbw/jboss-eap-4.3/jboss-as/nohup.out
tail 11076 root 3r REG 253,4 837978591 2843152 /app/cxbw/jboss-soa-p.4.3.0/jboss-as/nohup.out
run.sh 13744 root 1w REG 253,4 837978591 2843152 /app/cxbw/jboss-soa-p.4.3.0/jboss-as/nohup.out
run.sh 13744 root 2w REG 253,4 837978591 2843152 /app/cxbw/jboss-soa-p.4.3.0/jboss-as/nohup.out
java 13774 root 1w REG 253,4 837978591 2843152 /app/cxbw/jboss-soa-p.4.3.0/jboss-as/nohup.out
java 13774 root 2w REG 253,4 837978591 2843152 /app/cxbw/jboss-soa-p.4.3.0/jboss-as/nohup.out
进程找到了,只需要通过kill 命令来杀掉进程就可以了。
3.2原因分析
上面只讲了通过rm命令删除被占用的文件时,系统不释放空间的处理方法,那如何规避呢,其实很简单,只需要通过如下命令来清理空间就没有问题
[root@huanhuaprd01 jboss-as]# >nohup.out
当然方法有多种,比如也可以
[root@huanhuaprd01 jboss-as]#cat /dev/null > nohup.out
清理只是一种手段,那如何让该无用的日志都不产生呢,且看启动脚本:
[root@huanhuaprd01 jboss-as]# cat start-soa.sh
!/bin/sh
export JBOSS_HOME=/app/cxbw/jboss-soa-p.4.3.0/jboss-as
nohup $JBOSS_HOME/bin/run.sh -Dfile.encoding=GB2312 -c default -b 0.0.0.0 &
nohup $JBOSS_HOME/bin/run.sh -Dfile.encoding=GB2312 -c default -b 0.0.0.0 >/dev/null 2>&1 &
把启动脚本替换为蓝色的部分,就彻底不会产生该日志了,对比,只增加了如下的信息> /dev/null 2>&1 & ,让脚本日志不输出,错误重定向到标准输出中,而标准输出又重定向到/dev/null 这个黑洞了;当然启动脚本有诸多不完善的地方,如脚本唯一性判断等,这里不多说。