Linux系统扩展硬盘空间

最近在编译内核的时候,遇到了/usr/src/硬盘空间不足的问题,此前遇到硬盘分区的问题总是用图形化工具进行,这样虽然高效可是总感觉太傻瓜,正好凑着这个机会总结一下。


Linux相关命令介绍

本文主要介绍在没有使用LVM的情况下如何对空间进行扩容操作,在介绍具体步骤之前,需要先了解一下Linux有关磁盘空间的命令。
1、df命令
linux中df命令的功能是用来检查linux的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。具体的参数利用--help参数获得即可,常用的是-h选项,文件大小采用GB,MB等方式显示。
命令格式:df [选项] [文件]

[root@localhost Desktop]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G   12G  4.7G  72% /
tmpfs           947M   80K  947M   1% /dev/shm
/dev/sda1       283M   91M  177M  34% /boot
/dev/sda3        20G  1.0G   18G   6% /usr/local

2、du命令
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。常用选项有-h,文件采用GB,MB方式显示;-s只显示路径的总文件大小。
命令格式:du [选项][文件]

[root@localhost Desktop]# du -h /usr/local/
4.0K    /usr/local/games
96K /usr/local/libexec/git-core/mergetools
650M    /usr/local/libexec/git-core
650M    /usr/local/libexec
980M    /usr/local/

[root@localhost Desktop]# du -sh /usr/local/
980M    /usr/local/

Linux磁盘空间扩容

相关操作介绍

1、查看当前分区信息

[root@localhost Desktop]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        4965    20974226+  83  Linux
/dev/sda4            4966        5221     2056320   82  Linux swap / Solaris

2、分区操作

[root@localhost Desktop]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
     switch off the mode (command 'c') and change display units to
     sectors (command 'u').

Command (m for help): m
Command action
a   toggle a bootable flag
b   edit bsd disklabel
c   toggle the dos compatibility flag
d   delete a partition
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)

Command (m for help): 

a :设置可引导标记
b :修改bsd的磁盘标签
c :设置DOS操作系统兼容标记
d :删除一个分区
l :显示已知的分区类型,其中82为Linux swap分区,83为Linux分区
m :显示帮助信息
n :增加一个新的分区
o :创建一个新的空白的DOS分区表
p :显示磁盘当前的分区表
q :退出fdisk程序,不保存任何修改
s :创建一个新的空白的Sun磁盘标签
t :改变一个分区的系统号码(比如把Linux Swap分区改为Linux分区)
u :改变显示记录单位
v :对磁盘分区表进行验证
w :保存修改结果并退出fdisk程序
x :特殊功能

(1)删除分区

Command (m for help): d            //输入命令d
Partition number (1-4): 3          //这里输入的数字根据fdisk -l结果中的顺序确定

Command (m for help): p       //查看当前分区情况,可以看到sda3已经删除

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda4            4966        5221     2056320   82  Linux swap / Solaris

(2)创建主分区

Command (m for help): n       //输入n创建新分区
Command action
   e   extended
   p   primary partition (1-4)
p                //创建主分区,主分区最多能创建4个
Partition number (1-4): 3        //fdisk -l的结果显示已经有sda1 sda2从sda3开始创建
First cylinder (2354-5221, default 2354):   //起始柱面,采用默认即可,回车
Using default value 2354
Last cylinder, +cylinders or +size{K,M,G} (2354-5221, default 5221): +20G  //截止柱面,采用+size的形式,+20G代表增加20G的空间

Command (m for help): p   //打印观察当前分区信息,可以看到sda3被创建

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2374      20201900   83  Linux

Command (m for help): 

(3)创建逻辑分区
扩展分区是无法使用的,必须在扩展分区的基础上创建逻辑分区,具体步骤如下所示:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e       //创建逻辑分区
Selected partition 4
First cylinder (2375-5221, default 2375): 
Using default value 2375
Last cylinder, +cylinders or +size{K,M,G} (2375-5221, default 5221): 
Using default value 5221

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2374      162019   83  Linux
/dev/sda4            2375        5221    22868527+   5  Extended   //sda4为Extended不能直接使用需要在此基础上创建逻辑分区

Command (m for help): n    //创建逻辑分区
First cylinder (2375-5221, default 2375): 
Using default value 2375
Last cylinder, +cylinders or +size{K,M,G} (2375-5221, default 5221): 
Using default value 5221

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2374      162019   83  Linux
/dev/sda4            2375        5221    22868527+   5  Extended
/dev/sda5            2375        5221    22868496   83  Linux   //可以看到sda5逻辑分区被创建

(4)创建swap交换分区

Command (m for help): n    //创建分区
Command action
   e   extended
   p   primary partition (1-4)
p   //创建主分区
Partition number (1-4): 3
First cylinder (2354-5221, default 2354): 
Using default value 2354
Last cylinder, +cylinders or +size{K,M,G} (2354-5221, default 5221): +2G

Command (m for help): t    //利用t命令将分区转化成swap分区
Partition number (1-4): 3
Hex code (type L to list codes): 82     //swap分区的类型号为82,Linux分区类型号为83,LVM类型分区号为8e
Changed system type of partition 3 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2615     2097851+  82  Linux swap / Solaris   //可以看到sda3已经成为swap分区

(5)保存退出操作

Command (m for help): w    //保存操作退出,需要重启电脑分区信息才能生效
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed 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.


Command (m for help): q    //不保存退出

[root@localhost Desktop]# 

(6)格式化分区

格式化Linux分区

[root@localhost Desktop]# mkfs.ext4 /dev/sda3  //格式化sda3为ext4格式
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
1311184 inodes, 5243556 blocks
262177 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
161 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost Desktop]# 

格式化Swap分区

[root@localhost Desktop]# mkswap /dev/sda4   //格式化sda4为swap分区格式
Setting up swapspace version 1, size = 2056316 KiB
no label, UUID=648482ec-0b42-4e14-af17-070742831f19
[root@localhost Desktop]# 

(7)挂载分区

临时挂载

[root@localhost Desktop]# mount /dev/sda3 /mnt/   //将mnt挂载到sda3上
[root@localhost Desktop]# df -h   //查看当前挂载信息
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G   13G  3.7G  78% /
tmpfs           947M  228K  947M   1% /dev/shm
/dev/sda1       283M   91M  177M  34% /boot
/dev/sda3        20G   44M   19G   1% /mnt
[root@localhost Desktop]# 

永久挂载
修改/etc/fstab文件,在结尾添加/dev/sda3 /usr/local/ ext4 defaults 0 0

 #/etc/fstab
 #Created by anaconda on Tue Dec 23 05:42:01 2014

 #Accessible filesystems, by reference, are maintained under '/dev/disk'
 #See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

UUID=4be66d01-fba7-496d-94e0-0727d44cdc07 /                       ext4    defaults        1 1
UUID=4a6343e8-80d2-4c56-93e9-9e0eca314ce0 /boot                   ext4    defaults        1 2
UUID=78f620c5-f8e1-457f-8a3d-dbb629ea7616 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sda3               /usr/local/             ext4    defaults       0 0

磁盘扩容具体步骤

有了上一小节的铺垫,磁盘扩容就简单多了,下面以Vmware下Cent OS为例进行扩大/usr/local/文件夹的磁盘空间。以下步骤是将Vmware虚拟机中的Linux进行磁盘扩展,真机的过程大同小异,真机不需要第一步虚拟机的相关操作,不做详细介绍。
一、虚拟机相关操作
关闭相关虚拟机--->虚拟机--->设置--->扩展(输入硬盘容量最大值)--->完成
二、系统中的相关分区操作
1、使用fdisk -l查询当前系统分区情况

[root@localhost Desktop]# fdisk -l 

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2611     2064384   82  Linux swap / Solaris

2、创建主分区

[root@localhost Desktop]# fdisk /dev/sda  //对sda进行操作

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m    //查看帮助信息
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   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)

Command (m for help): n    //创建新分区
Command action
   e   extended
   p   primary partition (1-4)
p    //主分区
Selected partition 4    //主分区最多创建4个,由于系统已经有3个主分区,自动选择partition 4
First cylinder (2611-5221, default 2611):    //起始柱面默认  回车
Using default value 2611
Last cylinder, +cylinders or +size{K,M,G} (2611-5221, default 5221):  //截止柱面默认 回车  也可以+20G         
Using default value 5221

Command (m for help): p   //查看最新分区信息

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39        2354    18598912   83  Linux
/dev/sda3            2354        2611     2064384   82  Linux swap / Solaris
/dev/sda4            2611        5221    20966162+  83  Linux

3、保存退出分区操作

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed 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.   //虚拟机需要重启才能识别新分区

4、格式化相关分区
重启后,格式化分区

root@localhost Desktop]# mkfs.ext4 /dev/sda4   //将sda4格式成ext4格式
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
1310720 inodes, 5241540 blocks
262077 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

5、挂载分区
注意: 将指定文件夹挂载到新分区,相关内容会被清空,比如要将/usr/local下的内容挂载到/dev/sda4,需要将/usr/local下的相关内容备份,挂载结束后,在复制到/usr/local下。

修改/etc/fstab文件,在结尾添加/dev/sda4 /usr/local/ ext4 defaults 0 0
重启机器,利用df -h查看磁盘情况

 Size  Used Avail Use% Mounted on
/dev/sda2        18G   13G  3.7G  78% /
tmpfs           947M  224K  947M   1% /dev/shm
/dev/sda1       283M   91M  177M  34% /boot
/dev/sda4        20G   44M   19G   1% /usr/local

可以看到/usr/local/已经挂载到/dev/sda4上,空间为20G,将备份的的内容重新复制到/usr/local/即可。


LVM介绍

由于当时装系统的时候没有采用LVM方式,导致无法直接对/目录进行扩展,以后装系统的时候还是采用LVM管理磁盘空间吧,LVM的优点就不在这里详细叙述,下边对LVM进行简单的总结,以便日后方便使用。

一、LVM简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
如下图所示:由四个磁盘分区可以组成一个很大的空间,然后在这些空间上划分一些逻辑分区,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给空间不够用的分区使用。


LVM模型
LVM模型

二、LVM常用术语
1、物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
2、物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
3、卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
4、逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
5、PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
6、LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
简单来说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区


PV VG LV逻辑关系
PV VG LV逻辑关系

参考文献

http://www.tuicool.com/articles/AfM7Nn6
http://www.linuxidc.com/Linux/2012-06/61873.htm
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html
http://www.osyunwei.com/archives/9368.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容