blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

Linuxの起動ディスクのお引越

概要

Ubuntu16.04を違うディスクに引っ越した時に行った作業のメモ。 もっと簡単に行う方法もあるかもしれない。

作業

作業はUSBメモリなどから起動した別Linuxからの作業とする。 (引越し元のシステムが起動した状態でも行うことはできると思うが、 システムが起動のためにマウントしているファイルシステムなどもあるため、 別システムで行ったほうが安全のように思う。)

ディスクのデバイスファイルは下記のような配置とする。

  • /dev/sda 引越元ディスク
    • /dev/sda1 起動パーティション
  • /dev/sdb 引越先ディスク
    • /dev/sdb1 起動パーティション

引越し先のファイルシステムのフォーマット

引越し先のディスクのファイルシステム(ext4,xfs,btrfs,…)は、 引越し元と同じ形式にすることを想定している。 ファイルシステムを変更した場合は、カーネルモジュールの不足が起きたり、 マウントのオプションが異なったりした場合に起動できない可能性があるため、 ここに書かれていることのみでは成功しない恐れがある。

Ubuntu16.04のインストール時のデフォルトはext4であると思うので、 引越し元のファイルシステムがext4の場合は↓でパーティションを切ってフォーマットしておけば良い。

$ sudo parted -s -a optimal /dev/sdb -- mklabel msdos mkpart primary ext4 0% 100% set 1 boot on
$ sudo mkfs.ext4 /dev/sdb1

データの複製

引っ越し元から引っ越し先へデータをrsyncでコピーする。 マウント先は適当な場所で良いが今回は /mnt/ 下にした。

$ sudo mkdir /mnt/sda1
$ sudo mount /dev/sda1 /mnt/sda1
$ sudo mkdir /mnt/sdb1
$ sudo mount /dev/sdb1 /mnt/sdb1
$ sudo rsync -av /mnt/sda1/ /mnt/sdb1/

引越し先のファイルシステム/mnt/sdb1へchrootする

↓の手順でchrootしてから、続く作業を行う。

$ sudo mount --bind /dev /mnt/sdb1/dev
$ sudo mount --bind /proc /mnt/sdb1/proc
$ sudo mount --bind /sys /mnt/sdb1/sys
$ sudo chroot /mnt/sdb1
(chroot)#

/etc/fstabの設定を書き換える

/etc/fstabに記載されている/dev/sda1のUUIDを/dev/sdb1のUUIDで書き換える。 blkidコマンドでパーティションのUUIDは確認できる。

(chroot)# blkid
/dev/sda1: UUID="e620079e-cd74-4f72-9bfe-aec792adc666" TYPE="ext4" PARTUUID="d49dc327-01"

lsblk -f でも確認できる。

(chroot)# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
└─sda1 ext4         e620079e-cd74-4f72-9bfe-aec792adc666 /

/dev/sdbへgrubのインストール

/dev/sdbのMBRへgrubをインストールする。 /dev/sdaのMBRをddでコピーする方法もあるが、こちらの方が覚えやすい気がする。

(chroot)# grub-install /dev/sdb
(chroot)# update-grub

initramfsの更新

initramfsの更新もしておく。

(chroot)# update-initramfs -u

再起動

chrootを終了し、コンピュータを再起動する。 BIOSで起動ドライブを/dev/sdbに対応するディスクに切り替えたら/dev/sdbから起動が始まる。