実行時にシステムのルートパーティションのサイズを増やすにはどうすればよいですか?
ルートパーティション(ext4でもあります)の後に割り当てられていないパーティションがあります。サーバーをシャットダウンせずに、その未割り当てのスペースをルートパーティションに割り当てられたスペースに追加するにはどうすればよいですか?
GUI(Ubuntu 14.04以降):GParted v0.17以降はこのための素晴らしいGUIを提供します。 (古いバージョンは、マウントされたパーティションのサイズ変更を拒否します)。
コマンドライン(任意のUbuntuバージョン):これには3つのステップがあります。
ステップ1.最初にパーティションのサイズを変更する必要があります。 LVMを使用している場合、それは簡単で、おそらくあなたはどのように進むべきか知っているでしょう。クラシックパーティションを使用している場合は、もう少し複雑です。mayには再起動が必要です(ただし、別のシステムやライブCDを起動する必要はありません)。
これは私がそれを行う方法です:fdisk
を使用して最初にパーティションを削除し(アイデアはディスク上のデータが保持されるということです)、次に同じ位置でより大きなサイズで慎重に再作成します。
例:
$ Sudo fdisk /dev/sda
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9437183 4717568 83 Linux
Command (m for help): d
Selected partition 1
Command (m for help): p
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 2048 10485759 5241856 83 Linux
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.
繰り返しますが、新しいパーティションは古いパーティションと同じブロックから開始することが重要です。 Idも一致する必要があります(Linuxシステムの場合は83)。わずかな入力ミスですべてのデータを失う準備をしてください。
安全のために、a
を押してブートフラグを復元することもできます(一部のコンピューターでは Wikipediaによると が必要です)。
スワップパーティションが邪魔になった場合の対処方法については、コメントセクションを参照してください。
今では人々がライブCDの使用を推奨する理由は明らかです。 ;-)
ステップ2.fdisk
を参考にすると、続行する前にパーティションテーブルをリロードする必要があります。最も安全な方法は、単に再起動することです。ただし、partprobe
またはkpartx
(詳細) も使用できます。
ステップ3.パーティションのサイズが変更され、パーティションテーブルがリロードされると、ファイルシステムでresize2fs
を実行するだけで済み、マウントされていても実行できますルートパーティションとして。
例:
$ Sudo resize2fs /dev/sda1
ルートパーティションであっても、ext4ファイルシステムのオンラインサイズ変更を行うことができます。 resize2fs
コマンドを使用します。
Sudo resize2fs /dev/sda1
編集:オンラインでの縮小は許可されていません:
root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
より簡単な解決策-growpart <device> <partition>
を使用:
growpart /dev/xvda 1 # Grows the partition; note the space
resize2fs /dev/xvda1 # Grows the filesystem
いつものように、念のためパーティションテーブル(sfdisk -d /dev/xvda > partition_bak.dmp
)をバックアップします。
はい、オンラインルートパーティションを縮小/移動/拡大できます再起動せずに(livecdもusbkeyも): この回答を確認 。非常に長く、少し危険ですが、非常によく書かれており、簡単に理解できます。したがって、ext4パーティションのみを拡張する場合は、従来のresize2fs
ソリューションに固執することができます。
私が考えた一般的なソリューションは、たとえば、あらゆるタイプの専用またはVPSソリューションで機能します。
TLDR;この解決策は、pivot_root
をtmpfs
にすることを意味するため、ルートパーティションを安全にumount
生きたままいじることができます。完了したら、pivot_root
を新しいルートパーティションに戻します。
これにより、ルートファイルシステムのほとんどすべての操作が可能になります(移動、ファイルシステムの変更、物理デバイスの変更など)。
プロセスで再起動は必要ありません。これは制限のバイパスを許可 of resize2fs
縮小できませんext4
パーティションです。
私はこれを個人的に使用しましたが、debianシステムでも非常にうまく機能するため、Ubuntuでも機能するはずです。この詳細な解決策が、同じ問題を扱っているstackexchangeウェブサイトの多くの質問にもう少しリンクされていないことに私は非常に驚いています。
注:もちろん、パーティションを拡張したい場合、多くの場所や他の回答で述べられているように、単純なresize2fs
で十分です。
また、GPartedを使用することもできます-サイズ変更するパーティションが起動元のパーティションでない限り-live CDオプションは初心者にはやや簡単です。
GPartedは基本的にすべてのステップを実行します-GUIが前面にあるだけです。
@SørenLøvborgの答えを拡張したいと思います:スワップパーティションが存在する状態でパーティションを拡張します。
最初に、拡張後のディスクのレイアウト:
$Sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 10485759s 10483712s primary ext4 boot
10485760s 10487805s 2046s Free Space
2 10487806s 12580863s 2093058s extended
5 10487808s 12580863s 2093056s logical linux-swap(v1)
12580864s 14335999s 1755136s Free Space
そのため、sda1はディスクの最後の空き領域で拡張する必要がありますが、スワップパーティションはそれらの間にあります。これはあなたがそれを行う方法です:
まず、スワップを無効にする必要があります。使用量と、オフにできるかどうかを確認してください。
$ free -h
total used free shared buff/cache available
Mem: 992M 52M 464M 3.2M 475M 784M
Swap: 1.0G 0B 1.0G
スワップはここでは使用されないため、オフにできます
$Sudo swapoff /dev/sda5
次に、パーティションテーブルを変更します。
$Sudo fdisk /dev/sda
(注:最初のパーティションが2048ではなくセクター63で始まる場合、オプション-c=dos
を追加する必要があります)
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 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
Disklabel type: dos
Disk identifier: 0x9e11c6df
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 10485759 10483712 5G 83 Linux
/dev/sda2 10487806 12580863 2093058 1022M 5 Extended
/dev/sda5 10487808 12580863 2093056 1022M 82 Linux swap / Solaris
Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941
Created a new partition 1 of type 'Linux' and of size 5.9 GiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):
Created a new partition 2 of type 'Linux' and of size 1022 MiB.
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: 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).
注:sda1のサイズは、セクターの合計量からスワップパーティションのセクターサイズを引いたものです:14335999-2093058 = 12242941
Fdiskが言及しているように、カーネルはまだ古いパーティションテーブルを使用しているため、リロードする必要があります。
$partprobe
次に、sda1でresize2fsを実行する必要があります(これを忘れないでください!)
$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.
今、物事はまだ終わっていません。お気づきのとおり、sda2はLinux(Ext4)タイプとしてパーティション分割されています。何らかの理由で、fdiskでタイプを選択する方法はありません。そのため、cfdisk
を使用して代替する必要があります
$ Sudo cfdisk
Sda2を選択し、タイプを82 Linux swap / Solaris
に変更して、必ず書き込みます(確認するにはyesと入力します)
これでスワップを再度有効化できます
$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
そして最後に有効にします:
$swapon /dev/sda2
行う必要があるのは、fstabを更新して、ブート時にスワップパーティションを自動的にマウントすることだけです。
$Sudo nano /etc/fstab
そして、スワップパーティションのUUIDを上記の出力に変更します。
# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
これですべてが正常になり、問題なく再起動できます。
ルートがマウントされている間に、稼働中のシステムでext4ルートパーティションのサイズ変更を完了しました。
[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.
[root@habib i686]#
Ubuntu 16.04、4.4.0カーネルのparted 3.2を使用して、umount
、pivot_root
、またはメインパーティションを一時的に削除せずに、これを正常に実行しました。念のために、ネットワークを無効にして仮想コンソールからすべてを行い、念のためスナップショットを事前に作成しましたが、スナップショットは必要ありませんでしたので、SSHを介してランレベルを変更せずにこれを行うことができました。
パーティションサイズを決定します:parted /dev/sda1 print | egrep "Disk.*GB"
必要に応じて、ネットワークなしでマルチユーザーモードに切り替えます(SSHではなくコンソールから実行する必要があります)。
runlevel # remember the original runlevel
init 2
必要に応じて、VMスナップショットを作成して注意してください。
パーティションのサイズ変更:
parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q
ファイルシステムのサイズ変更:resize2fs /dev/sda1
問題が発生した場合は、ここでスナップショットを復元できます。すべてうまくいった場合は、通常のランレベル(上記で取得)に戻ります-通常5:init 5
。この時点で完全な再起動を行って、すべてが正常に戻ることを確認することをお勧めします(後で日付/ ntpの問題が発生しました)。
次の手順を実行します。
su
parted
を実行しますp
と入力して、使用可能なパーティションを表示しますrm PARTITION NUMBER
を使用して空き領域を作成することにより、隣接するパーティションを削除します。resizepart ROOT NUMBER
と入力してルートサイズを増やし、必要に応じてシステムを再起動しますparted
と入力してexit
を終了し、ターミナルでpartprobe
と入力してEnterキーを押します(これは再起動後でも可能です)resize2fs /dev/sda PARTITION NUMBER
を実行し、広々としたルートパーティションをお楽しみください。前に述べたように:
ルートシステムからライブで拡張することが可能です(ブートセクションは移動しないため、問題はありません)
ライブブートパーティションの縮小は、外部ブートデバイスから実行する必要があります(ライブシステムcd/usb-stickからブート)。障害、ミスマッチ、システムのハングアップ、システムのハングアップ、再起動が必要で、最終的には起動しません正しく起動できます。
どんな種類の「でも私はそれをやったし、うまくいく」というのは純粋な運です。