使用LVM添加磁盘

我确定这个问题以前在这里的某个地方已经有人回答过了(我甚至找到了一个指南here,但似乎有点零散和不完整),但我想知道是否有人能帮助我或者至少指点我朝着正确的方向去完成我想做的事情。
基本上,我在一个20GB的硬盘上安装了Ubuntu 14.04(通过“引导-使用整个磁盘并设置LVM”)。然后我又物理上添加了一个干净的80GB的硬盘到机器上,它将其检测为'sdb'。
我的问题基本上是,我想要能够将新硬盘(80GB)分配的空间添加/合并到我的机器上,这样它就不再显示两个驱动器(20GB和80GB),而是只显示一个驱动器(100GB)。我不担心RAID或任何其他特殊附加组件。
我对Linux还比较新手,但我知道我需要使用LVM来实现这个目标。
如果有人能帮助我或者给我提供一个有用的指南/教程的链接,我将非常感激!不确定是否需要,但这是我的'fdisk -l'和'/etc/fstab'输出:

fdisk 输出(缩短版):

Disk /dev/sda: 21.5 GB, 21474836480 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1    *       2048      499711      248832   83  Linux
/dev/sda2          501758    41940991    20719617    5  Extended
/dev/sda5          501760    41940991    20719616   8e  Linux LVM

Disk /dev/sdb: 85.9 GB, 85899345920 bytes
Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/mapper/ubuntu--vg-root: 20.4 GB, 20392706048 bytes
Disk /dev/mapper/ubuntu--vg-root doesn't contain a valid partition table

Disk /dev/mapper/ubuntu--vg-swap_1: 801 MB, 801112064 bytes
Disk /dev/mapper/ubuntu--vg-swap_1 doesn't contain a valid partition table

/etc/fstab(简化版):

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=26710773-7a64-4f34-a34e-0057cb1739d7 /boot           ext2    defaults        0       2
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0
3个回答

在浏览了一些网络上的随机指南和教程后,我成功地将一块硬盘添加到我的Ubuntu Server 14.04机器上,并且通过使用LVM将多个硬盘合并成一个单一的驱动器。为了帮助其他可能想要进行这样操作的人,我将在这里分享我所做的步骤。
这些步骤假设您基本上是从零开始,除了已经在您的机器上安装了Ubuntu(通过“引导-使用整个磁盘和设置LVM”),并且已经物理添加了额外的磁盘。如果您的机器上有现有数据,这些步骤可能也适用,但我不能确定这样做是否安全。
以下命令假设以下信息,并且根据您的设置会有所不同:
- 您的新磁盘是'sdb' - 可以通过运行'ls /dev/sd*'找到 - 您的卷组名称是'ubuntu-vg' - 可以通过运行'vgdisplay'找到 - 您的逻辑卷路径是'/dev/ubuntu-vg/root' - 可以通过运行'lvdisplay'找到 - 您的新磁盘大小为20GB - 希望您知道磁盘的大小。
  1. 安装逻辑卷管理器(你可能需要或不需要这样做)。

    sudo apt-get install system-config-lvm
    
  2. 将新硬盘转换为物理卷(在本例中,新硬盘是 'sdb')。

    sudo pvcreate /dev/sdb
    
  3. 通过 'vgextend' 将物理卷添加到卷组中。

    sudo vgextend ubuntu-vg /dev/sdb
    
  4. 将物理卷分配给逻辑卷(根据新硬盘大小扩展卷的大小)。

    sudo lvextend -l +100%FREE /dev/ubuntu-vg/root
    
  5. 调整逻辑卷上的文件系统大小,以利用额外的空间。

    sudo resize2fs /dev/ubuntu-vg/root
    
搞定了。只需要五个简单的步骤!你也不必重新启动。只需运行df -h,你的新磁盘空间应该正确分配,并且任何正在运行的网页应用程序都会显示新的磁盘空间量。

2你可以使用lvextend -l +100%FREE来扩展并使用所有的可用空间,而不是使用lvextend -L+20G - nathancahill
1你可以使用 cat /proc/partitions; /sbin/rescan-scsi-bus; cat /proc/partitions 命令来查找新安装的驱动器的名称,例如 sdb - O. Jones
1这个方法应该可以运行;然而,我建议不要将整个磁盘作为逻辑卷。相反,我建议在磁盘上分区,并在一个或多个分区中创建LVM。这种做法可以在未来提供灵活性,如果您将来需要一些非LVM空间的话。如果遇到一个假设所有磁盘都已分区的工具,这种方法可能也更有效。我不知道有哪些重要的例子是这样的工具,但你永远不知道在未来可能会出现什么样的假设,你可能想要或需要运行某个随机实用程序。 - Rod Smith
根据Rod Smith的评论,这意味着你需要先在/dev/sdb上运行fdisk命令,将所有空间分配给一个新的分区,将该分区设置为"Linux LVM"(类型8e),然后将你的指令中所有的/dev/sdb条目替换为/dev/sdb1。 - mtalexan
很棒的指南。不过,使用lsblk来检查可用磁盘会更美观。尽管在RHEL7上进行测试。 - erikbstack
2请注意,Ubuntu服务器似乎默认使用逻辑卷路径/dev/ubuntu-vg/ubuntu-lv而不是/dev/ubuntu-vg/root。因此,请通过sudo lvdisplayls /dev/ubuntu-vg/进行确认。例如,我在第4步中需要使用以下命令:sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv - Stéphane

这个技巧对我来说在一个128GB的SSD主硬盘和2TB的HDD扩展硬盘上都有效。
如果在将物理卷添加到卷组时遇到使用"ubuntu-vg"的问题,请尝试执行以下命令。
sudo vgdisplay 

通常,卷组的名称格式为NAME_OF_COMPUTER-vg,因此如果您的系统命名为SKYNET,您的卷组可能会被命名为
SKYNET-vg

我尝试在14.04 64位桌面版上使用3个500GB SATA硬盘设置一个大型LVM磁盘。安装过程中出现设备错误导致失败。我找到了一个链接,说扩展的限制是256G以上的驱动器,但我不知道这是否适用于此情况。
我还尝试设置RAID(RAID 1 /boot 300MB,RAID 0 swap 2GB,和/ RAID 5其他所有内容)。结果也是失败。
从Live CD的"试用Ubuntu而不安装"选项中,您仍然可以安装MDADM。但仍然没有运气。GParted检测似乎有些问题,无法识别LVM中的某些卷或RAID /dev/mdX中的某些卷,除非已经给每个卷分配了文件系统。 $ sudo mkfs.etx4 /dev/md2
此外,RAID配置现在带来了更多的挑战。MDADM似乎不再添加到安装的/target/usr/sbin软件包列表中,而且在那里安装它以便在重新启动时开始安装将是一项巨大的任务,我根本没有时间或耐心,只是为了发现几个小时后它仍然无法在这些新的Windows 8性能改进的主板(UEFI)上启动(由于GRUB问题)。
从Ubiquity安装LVM效果很好,直到你需要向/(根分区)添加更多磁盘,此时你很有可能导致整个安装失败。LVM调整大小操作一直失败,最终又回到了起点。
尝试使用14.04服务器安装程序的Partman拯救了一天。
启动了14.04服务器安装程序,它完美地识别了架构,安装了MDADM,grub被安装到了所有3个磁盘上,一切都运行良好。
3个磁盘(500GB SATA)
每个磁盘有3个分区。在fdisk中,所有分区都设置为Linux Raid类型。
RAID 1 /boot,300MB分区,RAID 0交换空间,2GB分区,以及RAID 5 /,500GB(剩下的空间)。

$ sudo fdisk -l
Device Boot Start End Blocks Id System
/dev/sda1 2048 616447 307200 83 Linux
/dev/sda2 616448 4810751 2097152 83 Linux
/dev/sda3 4810752 976773167 485981208 fd Linux raid autodetect

Device Boot Start End Blocks Id System
/dev/sdc1 * 2048 616447 307200 83 Linux
/dev/sdc2 616448 4810751 2097152 83 Linux
/dev/sdc3 4810752 976773167 485981208 fd Linux raid autodetect

Device Boot Start End Blocks Id System
/dev/sdb1 2048 616447 307200 83 Linux
/dev/sdb2 616448 4810751 2097152 83 Linux
/dev/sdb3 4810752 976773167 485981208 fd Linux raid autodetect
...

$ sudo ls /dev/md*
/dev/md0 /dev/md1 /dev/md2

/dev/md:
0 1 2

$ sudo mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 6 13:03:01 2014
Raid Level : raid1
Array Size : 306880 (299.74 MiB 314.25 MB)
Used Dev Size : 306880 (299.74 MiB 314.25 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Mon Aug 11 19:51:44 2014  
      State : clean   

Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0

      Name : ubuntu:0
      UUID : 03a4f230:82f50f13:13d52929:73139517
    Events : 19

Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 2 8 33 2 active sync /dev/sdc1

$ sudo mdadm -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Wed Aug 6 13:03:31 2014 Raid Level : raid0 Array Size : 6289920 (6.00 GiB 6.44 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent

Update Time : Wed Aug 6 13:03:31 2014 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0

Chunk Size : 512K

     Name : ubuntu:1
      UUID : 9843bdd3:7de01b63:73593716:aa2cb882
    Events : 0

Number Major Minor RaidDevice State 0 8 2 0 active sync /dev/sda2 1 8 18 1 active sync /dev/sdb2 2 8 34 2 active sync /dev/sdc2

$ sudo mdadm -D /dev/md2 /dev/md2: Version : 1.2 Creation Time : Wed Aug 6 13:03:50 2014 Raid Level : raid5 Array Size : 971699200 (926.68 GiB 995.02 GB) Used Dev Size : 485849600 (463.34 GiB 497.51 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent

Update Time : Mon Aug 11 19:54:49 2014 State : active Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0

    Layout : left-symmetric
Chunk Size : 512K

      Name : ubuntu:2
      UUID : 6ead2827:3ef088c5:a4f9d550:8cd86a1a
    Events : 14815

Number Major Minor RaidDevice State 0 8 3 0 active sync /dev/sda3 1 8 19 1 active sync /dev/sdb3 3 8 35 2 active sync /dev/sdc3

$ sudo cat /etc/fstab
'# /etc/fstab: static file system information.'
'#'
'# Use 'blkid' to print the universally unique identifier for a'
'# device; this may be used with UUID= as a more robust way to name devices'
'# that works even if disks are added and removed. See fstab(5).'
'#'
'# '
'# / was on /dev/md126 during installation'
UUID=2af45208-3763-4cd2-b199-e925e316bab9 / ext4 errors=remount-ro 0 1
'# /boot was on /dev/md125 during installation'
UUID=954e752b-30e2-4725-821a-e143ceaa6ae5 /boot ext4 defaults 0 2
'# swap was on /dev/md127 during installation'
UUID=fb81179a-6d2d-450d-8d19-3cb3bde4d28a none swap sw 0 0

跑得像纯种马一样。我突然想到,如果你使用的是32位硬件,这对你来说行不通,但我认为在这一点上,软RAID可能比只有单个磁盘的LVM更糟糕,而且对于任何较小的东西,JBOD也比这个更老的东西更糟糕。
谢谢。

Partman拯救了这一天。启动了14.04服务器安装程序,它完美地识别了架构,安装了MDADM,一切都运行得很好。以下是设置的摘要,希望对您有所帮助。 - spyderdyne