Proxmox仮想環境にUbuntu Samba構築と既存データの移行

Linux

オンプレで動かしていた自宅ファイルサーバー(Ubuntu22.04LTS + Samba)を、Proxmox上のSambaへ移行しましたので、Samba構築からHDDストレージデータ移行まで解説します。

Proxmoxへ移行した理由

これまでSambaサーバーでは、Web検証に使うApache, 無線受信アプリ開発環境のGNURadioをいれて使っていましたが、NIC操作をする度にSambaサーバーの動作に注意を払う必要がありました。

その解決策として、Proxmox上に各サーバー専用OS環境を構築し、サーバーアプリが影響しないようにすることができます。

Linuxの機能であるDockerを使っても同じ事ができますが、Proxmoxのほうが汎用性がありますし、ほぼGUI操作で完了できますので、おすすめです。

備考:筆者がファイルサーバーを構築したのは2006年です。当時はCore2Duo機が全盛でシングルコア機を現役で使っていた時代で、VMwareやHyper-Vなどのハイパーバイザは、個人で使えるレベルではなかったです。いい時代になりました。

導入手順

旧システムは、2TBのHDDに共有データを保存していましたので、新たに共有データ用のHDDを準備し、フルコピーをとって新システムへ移行することにしました。

  • (事前準備)Proxmox+Ubuntu22.04LTS(ゲストOS)の環境構築(こちらの記事を参照)
  • (手順1)仮想環境のUbuntuにSambaを導入
  • (手順2)旧システムの共有データ(HDD)を新HDDへコピー
  • (手順3)Proxmox上のUbuntuへHDDマウントと共有フォルダの動作確認
  • (手順4)UbuntuでHDDを永続マウント処理

注意HDD接続操作は高リスク作業であるため、手順をよく理解してから作業を行うようにします。

(手順1)仮想上のUbuntuにSambaを導入

aptをアップデートします。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y samba

smb.confのバックアップをとります。

$ cd /etc/samba/
$ sudo cp -a smb.conf smb.conf.org

/mntにSamba共有フォルダを作成します。

以降の作業でHDDをマウントするためですので、現在は空フォルダでOKです。

$ cd /mnt
$ sudo mkdir share
$ sudo chmod -R 777 share

smb.confの設定を編集します。エディタはviよりnanoのほうが直感的で使いやすいです。

今回はネットワーク内のPCに対して、フォルダアクセスをフル許可をする設定例を記載します。

$ sudo nano smb.conf

最下行に以下を追記
[share]
        path = /mnt/share
        writeable = true
        browseable = yes
        guest ok = yes
        guest only = yes
        force create mode = 0777
        force directory mode = 0777

上記の設定の中で、特に"force create mode" , "force directory mode"の設定が重要です。

この設定がないとファイル書き込みした人の権限で書き込みされ、その他の人はRead Onlyとなってしまうことがあります。(guest ok, guest onlyの設定だけでも良さそうに思えるのですが、うまく動きません。)

Windowsエクスプローラに"\\192.168.0.100"(SambaサーバーのIPアドレス)を入力し、作成したshareフォルダにアクセスできることを確認します。

smb.confの設定を変えた場合は、以下でsambaを再起動し、動作チェックします。

$ sudo systemctl restart smbd

アクセス制限をしないSamba導入はとても簡単です。

企業等ではアクセス制限をかける必要がありますが、Sambaでユーザー管理すると大変になるため、Windows Active Directoryと連携するか、IPアドレス範囲制限で対応するほうが、メンテナンスは楽です。

(手順2)旧システムの共有データ(HDD)を新HDDへコピー

手順1で移行先のSambaファイルシステムが作れました。

次は、旧Sambaシステムからファイルシステムをコピーして移行します。

HDDコピーを取らずに、HDDを直接移設するならこの手順を飛ばしても可です。(直接移行の場合、RAID1/5といった冗長化システムの解除を忘れないようにしてください。)

旧システムにデータコピー先のHDDを接続し、フォーマットを行います。

フォーマットはubuntu標準アプリにある「ディスク」(Disks)を使うのが最も簡単です。

※「ディスク」は検索窓からディスクの入力で出てきます。

Linuxの単一データドライブとするため、Ext4、パーティション1でフォーマットします。

フォーマット完了後のマウントオプションでは、「システム起動時にマウントする」はチェックしないでください。

これ以降はコマンド操作で行いますので、必要最低限のみ入力するようにします。

フォーマットした新しいハードディスクをマウントします。

lsblkコマンドで追加したHDDデバイス名を調べます。

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
~loopは省略~
sda      8:0    0 298.1G  0 disk 
└─sda1   8:1    0 298.1G  0 part /var/snap/firefox/common/host-hunspell
                                 /
sdb      8:16   0 931.5G  0 disk 
└─sdb1   8:17   0 931.5G  0 part /mnt/hdd2
sdc      8:32   0   1.8T  0 disk 
└─sdc1   8:33   0   1.8T  0 part /mnt/share
sdd      8:48   0   1.8T  0 disk 
└─sdd1   8:49   0   1.8T  0 part

追加したHDDはどこにもマウントされていない/dev/sdd1であることがわかります。

マウントポイントを作成し、/dev/sdd1を/mnt/hdd3にマウントします。

$ sudo mkdir hdd3
$ sudo mount /dev/sdd1 /mnt/hdd3 --types=ext4 --options=rw

dfコマンドでマウント状況を確認します。

$ df
Filesystem      1K-blocks      Used  Available Use% Mounted on
tmpfs              805284      5304     799980   1% /run
/dev/sda1       306549688 173266512  117638300  60% /
tmpfs             4026412         0    4026412   0% /dev/shm
tmpfs                5120         4       5116   1% /run/lock
tmpfs             4026412       216    4026196   1% /run/qemu
/dev/sdb1       961229220 793240700  119134060  87% /mnt/hdd2
/dev/sdc1      1922659908 965502800  859465048  53% /mnt/share
tmpfs              805280        80     805200   1% /run/user/121
tmpfs              805280       108     805172   1% /run/user/1000
/dev/sdd1      1921680472        28 1823990696   1% /mnt/hdd3

マウント状況はfdisk -lでも確認できます。

fdiskは管理領域パーティションまででるため、sdd1/2/3/5という表記になります。

$ sudo fdisk -l
デバイス   開始位置   最後から     セクタ サイズ タイプ
/dev/sdd1      2048    1050623    1048576   512M Linux ファイルシステム
/dev/sdd2   2097152    6291455    4194304     2G Linux ファイルシステム
/dev/sdd3   6291456    8388607    2097152     1G Linux ファイルシステム
/dev/sdd5  16777216 3907029134 3890251919   1.8T Linux ファイルシステム

/dev/sdd1が/mnt/hdd3にマウントされ、容量が1.8TBであることが確認できます。

次にrsyncコマンドを用いて、既存Sambaファイルシステムから追加したHDDへフルコピーします。

rsyncコマンドはWindowsのrobocopyと似たコマンドで、ファイルサーバーなどの差分コピーを取るときに使います。

$ sudo rsync -av /mnt/share/* /mnt/hdd3

1TB程度のデータの場合、コピーは数時間かかります。

コピー完了後は、追加したHDDをアンマウントして、取り外します。

$ sudo umount /dev/sdd1

(手順3)Proxmox上のUbuntuへHDDマウントと共有フォルダの動作確認

コピーしたHDDを移行先のProxmoxホストマシンに接続し、ホストマシンのシェルからHDDデバイス名を調べます。

root@sca010:~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root  9 Jun 30 14:45 ata-HGST_HTE725050A7E630_RC050GCB3R7W8U -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 30 14:45 ata-HGST_HTE725050A7E630_RC050GCB3R7W8U-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 30 14:45 ata-HGST_HTE725050A7E630_RC050GCB3R7W8U-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 30 14:45 ata-HGST_HTE725050A7E630_RC050GCB3R7W8U-part3 -> ../../sda3
lrwxrwxrwx 1 root root  9 Jun 30 14:45 ata-WDC_WD20EZRZ-22Z5HB0_WD-WCC4M2VLD0DE -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun 30 14:45 ata-WDC_WD20EZRZ-22Z5HB0_WD-WCC4M2VLD0DE-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Jun 30 14:45 dm-name-pve-root -> ../../dm-1
~以下省略~

システムディスクがHGST製ですので、"ata-WDC_WD20EZRZ-*****"が増設ドライブとして認識されていることを確認できました。

このHDDは、Proxmoxを介さず、Proxmox上のホストOS「vm101:Ubuntu-samba」へ直接接続をするため、qmコマンドを使ってvm101へパススルー接続します。

注意:qmコマンドはProxmoxシステムの専用コマンドで、一般のLinuxには存在しません。ほとんどの場合、Yes/No確認なしでデバイス削除までできてしまいます。qmコマンドはシステムに重大な影響を与えてしまう場合があるため、実行前に意図した操作であることをよく確認しましょう。

入力フォーマット
# qm set <Guest Machine ID> -sata0 /dev/disk/by-id/ata-(UUID名称)
-sata#の#はドライブ番号、複数台を繋いでいる場合は別番号にする

実際の入力例
# qm set 101 -sata1 /dev/disk/by-id/ata-WDC_WD20EZRZ-22Z5HB0_WD-WCC4M2VLD0DE
update VM 101: -sata1 /dev/disk/by-id/ata-WDC_WD20EZRZ-22Z5HB0_WD-WCC4M2VLD0DE

vm101のハードウェアにハードディスクが追加されていれば成功です。

次にvm101(ubuntu-samba)マシンを起動し、コマンドで追加したHDDのデバイス名を調べます。

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  61.9M  1 loop /snap/core20/1405
loop2    7:2    0 155.6M  1 loop /snap/firefox/1232
loop3    7:3    0  63.9M  1 loop /snap/core20/2318
loop4    7:4    0 349.7M  1 loop /snap/gnome-3-38-2004/143
loop5    7:5    0 248.8M  1 loop /snap/gnome-3-38-2004/99
loop6    7:6    0  81.3M  1 loop /snap/gtk-common-themes/1534
loop7    7:7    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop8    7:8    0  45.9M  1 loop /snap/snap-store/575
loop9    7:9    0  38.8M  1 loop /snap/snapd/21759
loop10   7:10   0   284K  1 loop /snap/snapd-desktop-integration/10
sda      8:0    0    64G  0 disk
tqsda1   8:1    0     1M  0 part
tqsda2   8:2    0   513M  0 part /boot/efi
mqsda3   8:3    0  63.5G  0 part /
sdb      8:16   0   1.8T  0 disk
mqsdb1   8:17   0   1.8T  0 part

/dev/sdb1が増設したHDDとして認識されていることがわかります。

shareというマウントポイントを作成し、/dev/sdb1をマウントします。

注意chmod -R 777を忘れるとWindowsから読み書きができなくなる場合が出ます。忘れないようにしてください。

sambaのマウント先を作成
# cd /mnt
# mkdir share
# chmod -R 777 share

ディスクをマウント
# mount /dev/sdb1 /mnt/share/ --types=ext4

マウントを確認し、コピーしたファイルが認識できることを確認します。

マウント先のファイルを確認
$ ls /mnt/share/
MyVideos  backup  documents  lost+found  test.txt

Windowsのエクスプローラより、設定されているSambaネットワークフォルダアドレスを入力し、アクセスできることを確認できることを確認します。

ネットワークアドレス:\\192.168.0.100

※プリンターが不要な場合は、/etc/smb.cnfの[printer]をすべて"#"でコメントアウトすれば消えます。

(手順4)Ubuntu側でHDDを永続マウント処理

これでファイルシステムのコピーとマシン移動は完了です。

このままだとマシンの再起動時にマウントが外れてしまうため、/etc/fstabへHDDマウント処理を記載します。

最初にHDDのUUIDを調べます。

$ sudo blkid
/dev/sda3: UUID="d83ee26a-1e84-4903-ad24-03c90014ff45" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="890c1408-a416-4f31-b14d-a309a30a356d"
/dev/loop1: TYPE="squashfs"
/dev/loop8: TYPE="squashfs"
/dev/sdb1: LABEL="samba-share" UUID="93ca861e-b007-4896-ba9b-8e7cdf1070f6" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e78fff18-816a-4c89-87c6-1d2b9adb0cea"
~以下省略~

/dev/sdb1のUUID="************"が必要な情報です。

nanoエディタを使って/etc/fstabへマウント情報を設定します。

注意:"   "を外すのを忘れないようにします。

$ sudo nano /etc/fstab

末尾に以下設定を追記
#WD20EZRZ 20240630 add
UUID=93ca861e-b007-4896-ba9b-8e7cdf1070f6	/mnt/share	ext4	defaults

/etc/fstabは起動時にしか有効にならないため、Ubuntu-SambaのOSを再起動します。

$ sudo shutdown -r now

再起動後、Windowsから共有ファイルが見れるようになったら、移行は完了です。

IPアドレスが重複しないように、元のSambaシステムはシャットダウンするか、IPアドレスを変更することを忘れないようにします。

WindowsエクスプローラーでSambaサーバーを表示させる

Ubuntu Sambaサーバーにアクセスする際、「\\(IPアドレス)」で指定しても使えるのですが、IPアドレスを知らない人にとっては極めて不便です。

そのため、wsdd2という補助パッケージを導入し、Windowsエクスプローラー上にホストPCで表示させるようにします。

$ sudo apt install wsdd2

wsdd2はデフォルトで自動起動しませんので、次のコマンドで自動起動設定にします。

$ sudo systemctl enable --now wsdd2.service

Windows側でネットワークをクリックし、ファイルサーバーが見えていることを確認します。

ファイルサーバーはPCネットワークの重要インフラのため、筆者のように古いsambaを使い続けている方も多いと思いますが、このやり方で安全に移行できると思います。

ファイルサーバーを仮想化することにより、VPNサーバー、Apache、GNURadioなどを同じOS上で同居させなくて済み、システム管理の負担がかなり減りました。

筆者は、自宅でハイパーバイザが使えるようになったことに驚きですけどね。