Linux磁盘分区及格式化

一、问题:


一台Linux开发主机在安装时/home没有独立分区,随着用户不断增多,经常因根分区磁盘空间耗尽而故障频发。


二、方案:


为了解决这些问题,现要新增加一块SCSI 硬盘,并将用户目录“/home”中的数据迁移到该硬盘中。


1.添加一块80GB的SCSI接口的新硬盘,从中划分出一个20GB的主分区。


2.将新划出的20GB的分区格式化为EXT3文件系统,替换掉现有的/home目录。


3.迁移后不影响系统原有用户账号的使用。


4.从其余空间中划出2GB逻辑分区作交换空间、划出10GB逻辑分区作FAT32分区。


三、实现:


1、查看当前磁盘的磁盘分区情况


1)直接通过“fdisk -l”查看


[root@localhost ~]# fdisk -l


Disk /dev/sda: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2563    20482875   83  Linux

/dev/sda3            2564        2818     2048287+  82  Linux swap / Solaris

/dev/sda4            2819       10443    61247812+   5  Extended

/dev/sda5            2819       10443    61247781   83  Linux


2)通过“fdisk 磁盘设备”查看

(常用的fdisk交互指令如图所示)

wKioL1QFkePBisIvAAD0TGASrdM469.jpg

root@localhost ~]# fdisk /dev/sda


然后会进入到fdisk的交互式程序界面,输入指令p可查看分区情况:


The number of cylinders for this disk is set to 10443.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): p

Disk /dev/sda: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2563    20482875   83  Linux

/dev/sda3            2564        2818     2048287+  82  Linux swap / Solaris

/dev/sda4            2819       10443    61247812+   5  Extended

/dev/sda5            2819       10443    61247781   83  Linux


关于fdisk交互的操作指令,可根据提示输入指令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                //删除一个分区

   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)


2,为RHEL5虚拟机添加一块新磁盘


1)添加磁盘

将虚拟机关闭电源,通过“编辑虚拟机设置”-->“添加”-->“硬盘”-->“创建一个新的磁盘”-->“SCSI(建议)”-->“磁盘大小”设为80GB-->“完成”,最终添加一块容量为80GB的SCSI接口的虚拟磁盘,如图所示

wKiom1QFkfmhNZV8AAI-YVsZcRc351.jpg


2)识别新磁盘

重新打开虚拟机电源,登入Linux系统,执行fdisk -l确认新识别的硬盘。一般是硬盘序号靠后的,没有包含任何分区的空磁盘就是,比如/dev/sdb:


[root@localhost ~]# fdisk -l


Disk /dev/sda: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2563    20482875   83  Linux

/dev/sda3            2564        2818     2048287+  82  Linux swap / Solaris

/dev/sda4            2819       10443    61247812+   5  Extended

/dev/sda5            2819       10443    61247781   83  Linux


Disk /dev/sdb: 85.8 GB, 85899345920 bytes         //新增加的磁盘

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdb doesn't contain a valid partition table  //提示没有有效的分区表


3.为新增加的磁盘/dev/sdb规划分区


1)执行“fdisk /dev/sdb”命令进入分区界面:


[root@localhost ~]# fdsik /dev/sdb

bash: fdsik: command not found

[root@localhost ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.



The number of cylinders for this disk is set to 10443.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help):                            //等待输入交互指令



输入p指令后按Enter键,可列出当前的分区表,可以看到还没有任何分区:


Command (m for help): p             //查看分区表


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System


2)创建第一个主分区 /dev/sdb1


执行n指令以新建分区:


Command (m for help): n             //n 新建分区

Command action

   e   extended

   p   primary partition (1-4)


根据提示执行 p 指令,表示要新建一个主分区(若按e表示新建扩展分区);然后依次输入分区序号 1、起始柱面(默认)、结束柱面 +20G:


p                                    //新建一个主分区

Partition number (1-4): 1

First cylinder (1-10443, default 1):                  //使用的分区序号

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-10443, default 10443): +20G


设置完毕又回到等待状态,再次执行 p 指令可确认刚新建的分区/dev/sdb1:


Command (m for help): p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux


3)创建第二个主分区/dev/sdb2


再次执行n 指令以新建分区


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)


根据提示再次执行 p 指令,表示要新建的还是一个主分区;然后依次输入分区序号 2、起始柱面(默认)、结束柱面 +20G:


p

Partition number (1-4): 2

First cylinder (2434-10443, default 2434): 

Using default value 2434

Last cylinder or +size or +sizeM or +sizeK (2434-10443, default 10443): +20G


执行p指令确认新的分区结果,可看到新划分出的/dev/sdb2:


Command (m for help): p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux

/dev/sdb2            2434        4866    19543072+  83  Linux


4)新建扩展分区/dev/sdb4


再次执行p指令以新建分区:


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)


此时选e表示将选择建扩展分区;接下来分区序号选4(四个主分区位置就只剩下3和4可选,任用其中一个)、起始柱面(默认)、结束柱面(默认),将剩余的全部空间都分给扩展分区:


e

Partition number (1-4): 4                   //使用的分区序号

First cylinder (4867-10443, default 4867): 

Using default value 4867

Last cylinder or +size or +sizeM or +sizeK (4867-10443, default 10443): 


执行p指令确认新的分区结果,可看到新增加的扩展分区 /dev/sdb4:


Command (m for help): p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux

/dev/sdb2            2434        4866    19543072+  83  Linux

/dev/sdb4            4867       10443    44797252+   5  Extended


5)新建逻辑分区 /dev/sdb5、/dev/sdb6

再次执行n指令以新建分区:


Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)


此时因为扩展分区已建立,所以不再提供e可选,而是变为l(逻辑分区),p 虽然还可选,但实际上已经没有可分配空间了,选了也没用。


别无选择,只有选l,表示将要建立一个逻辑分区(容量2GB):


l

First cylinder (4867-10443, default 4867): 

Using default value 4867

Last cylinder or +size or +sizeM or +sizeK (4867-10443, default 10443): +2G


继续再建立另一个10GB的逻辑分区:


Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

l

First cylinder (5111-10443, default 5111): 

Using default value 5111

Last cylinder or +size or +sizeM or +sizeK (5111-10443, default 10443): +10G


执行 p 指令确认分区结果,可看到新增加的逻辑分区 /dev/sdb5、/dev/sdb6:


Command (m for help): p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux

/dev/sdb2            2434        4866    19543072+  83  Linux

/dev/sdb4            4867       10443    44797252+   5  Extended

/dev/sdb5            4867        5110     1959898+  83  Linux

/dev/sdb6            5111        6327     9775521   83  Linux


6)修改分区 /dev/sdb5、/dev/sdb6 的类型标识


执行 l 指令以列出已知的16进制分区类型代码(EXT为83、交换分区为82、FAT32大分区为c):


Command (m for help): l


 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris        

 1  FAT12           24  NEC DOS         81  Minix / old Lin c1  DRDOS/sec (FAT-

 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-

 3  XENIX usr       3c  PartitionMagic  83  Linux           c6  DRDOS/sec (FAT-

 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c7  Syrinx         

 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data    

 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .

 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set de  Dell Utility   

 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt         

 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access     

 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e3  DOS R/O        

 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor      

 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs        

 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  EFI GPT        

 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/

10  OPUS            55  EZ-Drive        a6  OpenBSD         f0  Linux/PA-RISC b

11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor      

12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor      

14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary  

16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     fb  VMware VMFS    

17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 

18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto

1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        

1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT   


执行 t 指令以更改分区类型、目标分区序号为5、类型标识改为82:


Command (m for help): t           //修改分区类型

Partition number (1-6): 5         //修改/dev/sdb5

Hex code (type L to list codes): 82    //类型改为82(交换分区)

Changed system type of partition 5 to 82 (Linux swap / Solaris)


再次执行 t 指令以更改分区类型、目标分区序号为6、类型标识改为c:


Command (m for help): t             //修改分区类型

Partition number (1-6): 6           //修改/dev/sdb6

Hex code (type L to list codes): c

Changed system type of partition 6 to c (W95 FAT32 (LBA))


执行 p 指令确认分区结果,确认各分区的容量、类型:


Command (m for help): p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux

/dev/sdb2            2434        4866    19543072+  83  Linux

/dev/sdb4            4867        7299    19543072+   5  Extended

/dev/sdb5            4867        5110     1959898+  82  Linux swap / Solaris

/dev/sdb6            5111        6327     9775521    c  W95 FAT32 (LBA)


7)保存fdisk分区方案


在此前的分区过程中,任何时间发现有错误,可使用d指令删除指定分区后重建;或者直接执行 q 指令放弃修改退出fdisk,重新进fdisk再来过。

如果确认分区结果正确,可以执行 w 将分区表写入磁盘:


Command (m for help): w           //保存分区更改,退出fdisk

The partition table has been altered!


Calling ioctl() to re-read partition table.


WARNING: If you have created or modified any DOS 6.x

partitions, please see the fdisk manual page for additional

information.

Syncing disks.

[root@localhost ~]# 


为了使Linux系统重新识别磁盘的新分区表,推荐执行一次partprobe(特别是修改现有分区表的情况下):


[root@localhost ~]# partprobe /dev/sdb


重新探测分区表


[root@localhost ~]# fdisk -l /dev/sdb


查看sdb的分区表情况


Disk /dev/sdb: 85.8 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2433    19543041   83  Linux

/dev/sdb2            2434        4866    19543072+  83  Linux

/dev/sdb4            4867        7299    19543072+   5  Extended

/dev/sdb5            4867        5110     1959898+  82  Linux swap / Solaris

/dev/sdb6            5111        6327     9775521    c  W95 FAT32 (LBA)


4.格式化分区


格式化分区也就是建立文件系统的过程,文件系统的类型决定了如何各种文件数据在磁盘上如何存放、如何访问。


1)创建EXT3文件系统


将主分区 /dev/sdb1 格式化,建立EXT3文件系统,下一步用来替换/home目录:


[root@localhost ~]# mkfs.ext3 /dev/sdb1     //或执行mfs -t ext3 /dev/sdb1


mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

2443200 inodes, 4885760 blocks

244288 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

150 block groups

32768 blocks per group, 32768 fragments per group

16288 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 38 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.


2)创建Swap交换文件系统

将逻辑分区 /dev/sdb5 格式化,建立Swap交换文件系统,用来扩展交换空间:


[root@localhost ~]# mkswap /dev/sdb5

Setting up swapspace version 1, size = 2006929 kB


3)创建FAT32文件系统

较早的Windows操作系统、一些U盘和MP4等设备可能还会使用FAT32文件系统。

将逻辑分区 /dev/sdb6 格式化,建立FAT32文件系统:


[root@localhost ~]# mkfs.vfat -F 32 /dev/sdb6

mkfs.vfat 2.11 (12 Mar 2005)


5.扩展当前的交换空间

1)查看原有的交换空间大小

执行 free -m 命令,以MB为单位查看内存和交换空间的使用情况,可以看出当前总共的交换空间为2000MB:

[root@localhost ~]# free -m

             total       used       free     shared    buffers     cached

Mem:           999        512        487          0         14        156

-/+ buffers/cache:        341        658

Swap:         2000          0       2000


或者也可以执行 swapon -s 来确认交换设备的组成:


[root@localhost ~]# swapon -s            //查看交换设备组成

Filename                                Type            Size    Used    Priority

/dev/sda3                               partition       2048276 0       -1


2)增加新的交换空间

启用此前格式化好的交换分区 /dev/sdb5:


[root@localhost ~]# swapon /dev/sdb5    //启用交换设备/dev/sdb5


3)确认新的交换空间大小


使用free -m查看时 ,总的交换空间已变为3914MB


[root@localhost ~]# free -m

             total       used       free     shared    buffers     cached

Mem:           999        513        486          0         14        156

-/+ buffers/cache:        342        657

Swap:         3914          0       3914


改用 swapon -s 的方式确认,可发现新增加的交换设备/dev/sdb5:


[root@localhost ~]# swapon -s

Filename                                Type            Size    Used    Priority

/dev/sda3                               partition       2048276 0       -1

/dev/sdb5                               partition       1959888 0       -2


4)停用指定的交换设备

在必要的时候,可以使用swapoff来停用指定交换设备,以减少交换空间。比如,将刚刚启用的交换设备 /dev/sdb5 停用,再次确认交换空间:


[root@localhost ~]# swapoff /dev/sdb5     //停用交换设备 /dev/sdb5


[root@localhost ~]# free -m

             total       used       free     shared    buffers     cached

Mem:           999        512        486          0         14        156

-/+ buffers/cache:        341        658

Swap:         2000          0       2000


6.使用 /dev/sdb1 替换现有的 /home 文件夹


1)备份原有的 /home 文件夹

原来的 /home 没有独立出来,可通过df工具查看所在文件系统,发现与根目录 / 使用的是同一个分区,一旦 /home 占用空间过大,就很容易影响到根文件系统:


[root@localhost ~]# df -hT /home           //查看/home所在的文件系统

文件系统      类型    容量  已用 可用 已用% 挂载点

/dev/sda2     ext3     19G  3.8G   15G  21% /


对于宿主目录在 /home 下的各用户,如果当前已登录,建议先退出。然后将 /home文件夹改个名暂存备份:


[root@localhost ~]# mv /home /home.old         //改名备份

[root@localhost ~]# ls -ld /home /home.old     //确认改名后现状

ls: /home: 没有那个文件或目录

drwxr-xr-x 3 root root 4096 08-20 12:56 /home.old


2)将分区/dev/sdb1 挂载到 /home文件夹


重建新的 /home 目录,并使用mount命令将分区 /dev/sdb1装载进来:


[root@localhost ~]# mkdir /home                //重建/home目录

[root@localhost ~]# mount /dev/sdb1 /home      //挂载独立分区

[root@localhost ~]# ls -ldh /home/*            //尚未恢复用户数据

drwx------ 2 root root 16K 09-02 17:24 /home/lost+found  //新建的EXT3文件系统会有这个“失物招领”文件夹


再次用df命令检查 /home 所在文件系统,挂载点已变成独立的 /home 了,对应的分区设备为 /dev/sdb1:


[root@localhost ~]# df -hT /home             //查看//home所在的文件系统

文件系统      类型    容量  已用 可用 已用% 挂载点

/dev/sdb1     ext3     19G  173M   18G   1% /home


将备份数据复制或移动到新的 /home 目录下:


[root@localhost ~]# cp -rpf /home.old/* /home/      //-p选项保持权限归属不变

[root@localhost ~]# ls -d /home/*

/home/lost+found  /home/pengpeng


等新的 /home 目录访问稳定、用户账号使用正常后,就可以删除备份的/home.old文件夹了:


[root@localhost ~]# rm -rf /home.old/



你可能感兴趣的:(linux,接口,开发,影响,交换空间)