オンプレで動かしていた自宅ファイルサーバー(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上で同居させなくて済み、システム管理の負担がかなり減りました。
筆者は、自宅でハイパーバイザが使えるようになったことに驚きですけどね。