AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 394948
Accepted
Tom
Tom
Asked: 2012-06-03 03:40:04 +0800 CST2012-06-03 03:40:04 +0800 CST 2012-06-03 03:40:04 +0800 CST

重新布局 LVM 磁盘

  • 772

我有一个带有两个 500GB 磁盘的 Ubuntu 11.10 系统。分区表如下所示:

/dev/sda1      primary   465.52GB
/dev/sda2      extended  243.17MB
  -> /dev/sda5 logical   243.14MB
/dev/sdb1      primary   465.76GB

sda1 和 sdb1 位于单个 LVM 物理卷组中,该组包含一个逻辑卷,该逻辑卷包含一个挂载为 / 的单个逻辑文件系统。sda5 安装为 /boot。

当我想升级到 Ubuntu 12.04 时,问题就来了,它在 /boot 上至少需要 247MB 的空闲空间。所以我需要减小 sda1 的大小,以便我可以增加 sda2 和 sda5 的大小。我到底该怎么做?我可以找到如何缩小逻辑卷组,但我不清楚如何清除 sda1 的末尾部分以便我可以减少物理卷组。pvresize 是否只是自动处理这个问题?还是那疯狂的一厢情愿?

我想替代方案是将所有内容备份到某个东西或其他东西上,然后从头开始重新创建这个东西,或者查明 GRUB2 是否支持将 LVM 用于 /boot。

hard-drive lvm
  • 3 3 个回答
  • 2208 Views

3 个回答

  • Voted
  1. Dmitri Chubarov
    2012-06-03T03:50:33+08:002012-06-03T03:50:33+08:00

    使用 缩小包含第一个物理卷的第一个分区后pvresize,您需要扩大该/boot分区。

    为了扩展/boot分区,您必须将其起点移动到第一个磁盘上。您可以parted使用move命令完成此操作。

    然后您可以再次调整分区大小parted并最终扩大文件系统。

    • 1
  2. DerfK
    2012-06-03T07:02:23+08:002012-06-03T07:02:23+08:00

    在 12.04 中,在 GRUB 中启用 LVM 和 raid 模块将使其比传统的 62 个可用于引导加载程序的扇区更大。据说现在大多数系统的分区都与 1MB 标记对齐,因此通常有足够的空间。您可以使用其中一个fdisks 或parted来检查sda1分区的起始位置(我知道 Debian 的安装程序对一切的去向含糊不清,不确定 Ubuntu 的安装程序是否有任何不同)。在尝试之前一定要检查一下,似乎有很多报告说如果没有足够的空间,grub 会抱怨没有足够的空间来工作,但无论如何尝试并使系统无法启动。

    作为查看如何使用 fdisk 的示例,这是fdisk /dev/sda我很久很久以前安装的 Debian 系统:(使用命令“u”显示扇区,然后使用“p”打印表格,使用“q”退出无变化)

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1              63     1959929      979933+  83  Linux
    

    这表明在我的例子中,它之前只有 62 个扇区。我将无法直接从 LVM 启动。

    • 1
  3. Best Answer
    Tom
    2012-06-05T23:57:40+08:002012-06-05T23:57:40+08:00

    我已经想通了。在我开始之前,我会说下面的数字可能不会相加——我试图完全重现我所做的,但我不得不回溯这些数字。我的建议是以千字节为单位尽你所能,因为所有工具都同意它们有多大。使用 fdisk 时要非常小心,分区至少与其包含的物理卷一样大,因为如果您尝试做一些愚蠢的事情,它不会警告您。

    首先,我需要从闪存盘启动(因为根文件系统在 LV 中)。然后检查文件系统是否正常:

    e2fsck -f /dev/mapper/root
    

    然后调整文件系统的大小:

    $ df
    Filesystem            1K-blocks      Used Available Use% Mounted on
    /dev/mapper/root      935093704 472743436 414857916  54% /
    
    $ resize2fs /dev/mapper/root 934093704k
    

    然后调整逻辑卷的大小:

    $ lvresize -L 934093704K /dev/mapper/root
    

    检查文件系统是否仍然正常:

    $ e2fsck -f /dev/mapper/root
    

    现在查看物理卷 - /dev/sdb1 末尾应该有一些可用空间:

    $ pvs
      PV         VG   Fmt  Attr PSize   PFree
      /dev/sda1  toad lvm2 a-   465.76g  4.00m
      /dev/sdb1  toad lvm2 a-   465.76g  1.28g
    

    我们需要将这个空闲空间移动到 /dev/sdb1 的末尾。首先查看每个驱动器上存在多少个盘区:

    $ pvs --segments
    
      PV         VG   Fmt  Attr PSize   PFree  Start  SSize
      /dev/sda1  toad lvm2 a-   465.76g  4.00m      0 119173
      /dev/sdb1  toad lvm2 a-   465.76g  1.28g      0 119141
    

    然后将一些从一个移动到另一个: $ pvmove /dev/sda1:118923:119173 /dev/sdb1

    $ pvs --segments
    
      PV         VG   Fmt  Attr PSize   PFree  Start  SSize
      /dev/sda1  toad lvm2 a-   464.55g  1.00g      0 119141
      /dev/sdb1  toad lvm2 a-   465.76g 284.0m      0 119141
      /dev/sdb1  toad lvm2 a-   465.76g 284.0m 119141 119173
    

    现在您可以使用 pvresize 调整物理卷的大小:

    $ pvresize --setphysicalvolumesize 487112704k /dev/sda1
    

    现在您可以使用 fdisk 调整分区大小。此处警告:我的分区已设置为 /dev/sda1 从扇区 63 开始。我曾假设这是默认设置,因此实际上并没有记下来。然后 fdisk 只会让我重新创建从扇区 2048 开始的分区,我不知道这是错误的 - 现在我有一个无法使用的系统!幸运的是,您可以重新删除并重新创建分区而不会产生任何不良影响,但我不得不猜测分区应该从哪里开始。所以在删除之前请注意您的分区开始的位置!

    $ fdisk /dev/sda
    Command (m for help): p
    
    Disk /dev/sda: 500.1 GB, 500107862016 bytes
    255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 identifier: 0x000730a3
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1              63   974227455   488113696+  8e  Linux LVM
    /dev/sda2       974229504   976771071     1270784    5  Extended
    /dev/sda5       974231552   976771071     1269760   83  Linux
    
    Command (m for help): d
    Partition number (1-5): 1
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 1 extended, 3 free)
       l   logical (numbered from 5)
    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-976773167, default 2048): 2048
    Last sector, +sectors or +size{K,M,G} (2048-974229503, default 974229503): +487113696K
    
    Command (m for help): x
    
    Expert command (m for help): b
    Partition number (1-5): 1
    New beginning of data (1-974229439, default 2048): 63
    

    我使用 GParted 移动并调整了 /dev/sda2 和 /dev/sda5 的大小,这让我不那么紧张了。然后,最后:

    $ mkdir disk
    $ mount /dev/sda5 disk
    $ grub-install --boot-directory=./disk /dev/sda
    

    在新位置重新安装引导加载程序。

    请注意,我首先创建了从 2048 开始的分区,然后将开始移动到 63。

    这里的 LVM 命令会告诉您是否要做一些愚蠢的事情,比如使物理卷小于它包含的分配范围,但有些不会,尤其是 fdisk - 很容易最终调整分区大小,以便它砍掉物理卷的末尾。这是一件坏事。确保分区至少和物理卷一样大!

    • 1

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • Linux:“发现重复的 PV XXXXYYYYY:用户 /dev/sdb1 而不是 /dev/sda1”

  • Windows C:驱动器大小

  • 了解磁盘队列长度

  • md5sum 重复为同一台机器上的同一文件提供不同的校验和

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve