`
zhangpuego
  • 浏览: 54806 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Linux对ext3分区大小进行无损更改的步骤

阅读更多
1 缩小一个ext3分区

这个章节介绍如何缩小一个ext3分区。在这个例子中,我将缩小我的/dev/sda5。首先让我们来看看目前系统的一些情况:
fdisk -l
df

如果你的分区中没有任何系统文件,则继续下面的步骤,否则,请重新启动系统.
当然,我们还是手工umount一次:
umount /dev/sda5

接下来运行:
fsck -n /dev/sda1

输出应该是这样的:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159037/1254176 files, 1095299/2504124 blocks

现在,我们将日志从/dev/sda1中去除,等于将其转成ext2系统:
tune2fs -O ^has_journal /dev/sda5

输出是这样的:
tune2fs 1.38 (30-Jun-2005)

接下来运行:
e2fsck -f /dev/sda5

运行结果:
e2fsck 1.38 (30-Jun-2005)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 164178/1254176 files (0.6% non-contiguous), 1051617/2504124 blocks

现在,我们用resize2fs来改变文件系统的大小。这个程序只能改变ext2文件系统的大小,这就是为什么刚才我们要先将ext3转换成ex2的原因。当前/dev/sda1已用4.1GB(刚才的df输出可以看到),因此,将10GB的分区缩小到6GB是比较安全的(不能转换到4.1GB以下,否则会丢失数据)。我们运行:
resize2fs /dev/sda5 6000M

输出:
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/sda1 to 1536000 (4k) blocks.
The filesystem on /dev/sda1 is now 1536000 blocks long.

请注意这些信息:块的数量(1536000)和大小(4k),一会我们将用到。接下来,我们将删除/dev/sda1分区,并创建一个新的,更小的分区。别害怕,不会有数据损失的。我们在fdisk下进行:
fdisk /dev/sda

注意阿,是sda,不是sda1。之后会显示:
The number of cylinders for this disk is set to 1305.
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)

现在,我们来删除/dev/sda5:
Command (m for help): d
Partition number (1-5): 5

然后创建一个新的/dev/sda5。由于之前它是一个主分区,所以这里我们选择p,并且是一号分区:
Command (m for help): n

Partition number (1-4): 5

现在,就到了关键步骤了:我们被要求输入新分区的大小。首柱面号不是问题,这可以从文章开始时fdisk -l的输出中获得,但我们还不清楚新分区的末柱面号是多少。幸运的是,我们能够确定以k位单位的分区大小,然后按照这个公式计算:

1536000 * 4k * 1.03 = 6328320k

然后,我们在结果前面加上一个+号,并将小写的k换成大写的K,再输入:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): +6328320K

现在,写入新的分区表并退出:
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.
Syncing disks.

然后重新启动。注意,这次还是启动到live-CD环境中(或者rescue模式),用su命令再次切换成root用户,然后运行:
fsck -n /dev/sda5

输出应该是这样的:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks

接下来,在新的/dev/sda1上创建日志文件,转换回ext3文件系统:
tune2fs -j /dev/sda1

tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.

好了,这下完成了。再次重启,启动到你原来的系统中,看看:

fdisk -l


Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris

fdisk -s /dev/sda1

6337611 搞定!
2 扩大一个ext3分区

在这里,我们拥有一个大约是6GB的/dev/sda1分区,在它后面,有一个大约4GB的未用空间(刚刚分出来的,呵呵)。现在,我们要做的就是把这 4GB的空闲空间增加到/dev/sda1分区中。请注意,如果这4GB的空余空间不在/dev/sda1后面,而是在硬盘的其它地方,就无法实现这个目的!
首先,我们收集一些当前分区的资料。

fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris

fdisk -s /dev/sda1

6337611

然后,我们需要关闭系统,并启动系统:

卸载sda5:
umount /dev/sda5

然后执行:
fsck -n /dev/sda1

输出:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1080014/1536000 blocks

然后是:
tune2fs -O ^has_journal /dev/sda5

输出:
tune2fs 1.38 (30-Jun-2005)

接下来运行:
fdisk /dev/sda

输出:

(Yes, it's /dev/sda, not /dev/sda1.)

The number of cylinders for this disk is set to 1305.
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)

Type m to get a list of all commands:

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): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris

现在,删除第一个分区:
Command (m for help): d
Partition number (1-5): 1

然后创建一个新的sda1分区,大体事项和缩小分区步骤一样:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1

现在就该确定最开始和末尾的柱面号,首先输出起始柱面号:
First cylinder (1-1305, default 1):

然后fdisk会告述我们可能的最大柱面号,在这里是1247,然后我们直接输入就行了:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): 1247

然后看一下新的分区表:
Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris

别忘了,之前的分区是启动分区,所以还需要做:
Command (m for help): a
Partition number (1-5): 1

最后写入:
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.
Syncing disks.

然后重新启动。还是启动到live-CD环境中(或者rescue模式),用su命令再次切换成root用户,然后运行:
fsck -n /dev/sda1

输出应该是这样的:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks

接下来,在新的/dev/sda1上创建日志文件,转换回ext3文件系统:
tune2fs -j /dev/sda5

tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.

好了,这下完成了。再次重启,启动到你原来的系统中,看看:

fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris

fdisk -s /dev/sda1

10016496

3 合并两个ext3分区:

在这个实例中,我的系统分区还是6GB左右的/dev/sda1,其后紧跟着/dev/sda3分区(大概4GB)。/dev/sda3挂载于/data目录,没有系统所需要的文件,只有用户数据。用df -h看,当前的分区就像这样:
df -h

Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 4.1G 1.6G 73% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 56K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
/dev/sda3 3.5G 72M 3.3G 3% /data

为了合并两个分区,我们必须删除/dev/sda3分区,然后增大sda1分区,就像第三部分描述的那样。也就是说,所有/sda3上的数据全部都会消失。因此,如果你还需要它们的话,请首先备份数据,之后再拷贝到新的,并且更大的sda1上面。
现在,我们打开/etc/fstab,移除与/dev/sda3有关的行(如果存在的话)。新的,不包含/sda3分区信息的fstab应该是像这样的:

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
# /dev/sda1
UUID=566fd9e9-098f-4aae-9908-51efe171d8ba / ext3 defaults,errors=remount-ro 0 1
# /dev/sda5
UUID=82102b65-35db-469a-9532-03d619d8cffb none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/ /media/floppy0 auto rw,user,noauto 0 0

然后,让我们umount /dev/sda3,用fdisk来删除它。首先umount /dev/sda3,然后fdisk /dev/sda(注意,这里是sda,不是sda3):
The number of cylinders for this disk is set to 1305.
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)

Type m to get a list of all commands:

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)

现在,删除sda3:
Command (m for help): d
Partition number (1-5): 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.
Syncing disks.

最后,重新启动系统,进入Live-CD环境或者rescue系统,从这里开始,步骤和第三部分就完全一样的,从su到umount /dev/sda1,其后的步骤请自行参考第三部分。

网址:http://www.linuxdiyf.com/viewarticle.php?id=58915
分享到:
评论

相关推荐

    简单的分区AM.zip

    4. **格式化分区**:创建完新分区后,需要为其分配文件系统类型,如FAT32、NTFS或EXT4,并进行格式化。 5. **分配驱动器字母**:在Windows中,你可以为新分区指定一个驱动器字母,方便日后访问。 6. **安全退出**...

    linux无损扩容的方法

    在Linux操作系统中,无损扩容是指在不丢失数据的情况下增加磁盘分区的大小。这通常在面临磁盘空间不足的问题时变得尤为重要。本篇文章将详细阐述如何在Linux环境下实现无损扩容,确保业务不受影响。 首先,我们需要...

    linux和windows双系统安装.pdf

    在分区阶段,选择手动分区,将之前划分给Linux的7GB空间格式化为Linux支持的文件系统,如ext3或ext4。 安装过程中,GRUB会自动安装到硬盘的主引导扇区,并创建引导菜单,让用户在启动时选择进入Windows还是Linux。...

    linux和windows双系统安装借鉴.pdf

    - **无损分区工具**:推荐使用第三方软件如Partition Magic,它可以在不丢失数据的情况下调整硬盘分区大小。 3. **分区步骤**: - 首先,在Windows下启动分区工具,选择要调整的分区(例如E盘)。 - 调整分区...

    分区魔术师最新版9.0中文版及操作手册.RAR

    这款软件提供了丰富的磁盘分区管理功能,包括但不限于创建、删除、调整分区大小、隐藏分区、转换分区格式等,极大地简化了用户对硬盘空间的管理和优化。在本案例中,用户通过Partition Magic 9.0成功地将D盘的部分...

    VISTA下分区详解

    这款软件的主要特点在于它能够帮助用户无损地调整分区大小、复制移动分区数据、修复损坏或删除的分区,并支持多操作系统引导管理。 ##### 支持的操作系统: - Windows 98 SE - Windows Me - Windows NT 4.0 ...

    扩大colinux虚拟机硬盘大小的方法

    - **文件系统**:ext3或ext4文件系统的基本操作,如`resize2fs`用于调整分区大小。 - **数据迁移**:`dd`命令如何在不同分区之间无损地迁移数据。 - **分区管理**:如何在Linux中创建、挂载和调整分区大小。 - **...

    Linux系统文件的优化及系统磁盘检查

    在Linux系统中,对系统文件进行优化和磁盘检查是维护系统稳定性和性能的重要环节。以下将详细讨论这些主题。 首先,我们来看一下如何优化Linux系统文件。这通常涉及到文件系统的配置,例如设置数据块大小。数据块是...

    硬盘分区工具

    3. **分区格式**:常见的分区格式有FAT16、FAT32、NTFS和EXT系列(EXT2、EXT3、EXT4,主要在Linux系统中使用)。NTFS格式支持更大的文件大小和更好的安全性,而FAT系列则更兼容多种设备和操作系统。 4. **分区对...

    ubuntu系统硬盘扩容方法

    在Linux系统中,随着软件的不断安装和系统文件的增加,用户往往需要对硬盘空间进行扩容以满足不断增长的存储需求。尤其在虚拟机环境下,由于硬盘空间往往是有限的,扩容工作显得尤为重要。本文将重点介绍在Ubuntu...

    linux安装的全程演示录像

    6. **分区**:在安装过程中,需要对硬盘进行分区。了解不同分区类型(如主分区、扩展分区和逻辑分区),以及文件系统格式(如ext4、FAT32或NTFS)。可以选择自动分区方案,也可以手动自定义分区,包括根目录(/)、...

    Linux操作系统的文件系统.

    在Linux中,几乎所有的硬件设备都被视为文件系统的一部分,通过设备驱动程序与操作系统进行交互。 #### 二、文件系统基础 文件系统的基本结构提供了用户与文件和目录交互的平台。用户可以使用`cd`命令在不同目录间...

    MiniToolPartitionRecovery.zip

    4. **支持多种文件系统**:除了常见的FAT和NTFS,还支持EXT1、EXT2、EXT3等Linux分区文件系统,适用范围广泛。 三、操作步骤详解 1. **下载与安装**:首先,从官方网站或可信源下载MiniTool Partition Recovery的...

    微型计算机组装与维护.pptx

    6. **硬盘魔术分区**:指的是硬盘管理工具,如Disk Management或第三方软件,允许用户动态调整分区大小、创建、删除、隐藏分区,甚至无损数据调整分区布局。 7. **注册表的使用**:注册表是Windows系统存储配置信息...

    rootOnNVMe 系统迁移包

    3. **修改配置**:可能需要修改新硬盘上的引导加载器配置,如GRUB或UEFI,以指向新的系统位置。 4. **迁移系统**:将创建的系统映像写入NVMe硬盘。这通常通过将映像文件解压到目标硬盘来完成。 5. **验证和启动**...

    易我数据恢复

    8. 安全性:在恢复过程中,软件不会对原始数据进行任何修改,确保数据安全无损。 9. 客户支持与更新:易我公司提供多语言的客户支持服务,用户在使用过程中遇到问题可以寻求帮助。同时,软件会定期更新以修复已知...

Global site tag (gtag.js) - Google Analytics