2019年1月16日 星期三

CentOS + Vmware Workstation Server

因為在 Gentoo Linux 上,設定 Vmware Workstation Server 不太直接,決定在 CentOS 上裝,測試一下,問題在那。

分別測了 CentOS 6 和 7,裝好 CentOS 後,執行下列指令,以便順利安裝 Vmware Workstation Server。
yum update
yum groupinstall "GNOME Desktop"
systemctl set-default graphical.target
重新開機後,繼續安裝發展工具,以便裝 kernel module。

yum groupinstall "Development tools"
yum install kernel-headers
yum install kernel-devel

yum install epel-release
yum groupinstall xfce

chmod +x VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle
./VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle
==> 在 CentOS 7 下,無法執行,因為改成 systemd 的管理

vmware-installer -u vmware-workstation



# cat /usr/lib/vmware/hostd/docroot/client/clients.xml
<ConfigRoot>
  <clientConnection id="0000">
    <authdPort>902</authdPort>
    <version>6</version>
    <exactVersion>6.0.0</exactVersion>
    <patchVersion>1.0.0</patchVersion>
    <apiVersion>dev</apiVersion>
    <downloadUrl>@@HOSTCLIENT_URL_WIN@@</downloadUrl>
    <flexClientVersion>6.0.0</flexClientVersion>
  </clientConnection>
</ConfigRoot>

# chkconfig --list
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole      0:off 1:off 2:off 3:off 4:off 5:off 6:off
network        0:off 1:off 2:on 3:on 4:on 5:on 6:off
vmware          0:off 1:off 2:on 3:on 4:off 5:on 6:off
vmware-USBArbitrator                 0:off 1:off 2:on 3:on 4:off 5:on 6:off
vmware-workstation-server 0:off 1:off 2:on 3:on 4:off 5:on 6:off

參考
https://slackblogs.blogspot.com/2015/04/vmware-workstation-10-on-linux-kernel.html

cp /usr/lib/vmware/modules/source/vmnet.tar /usr/lib/vmware/modules/source/vmnet_org.tar
tar xvf  /usr/lib/vmware/modules/source/vmnet_org.tar
vi vmnet-only/netif.c

vmnet-only/netif.c:468:7:
- dev->trans_start = jiffies;
+ netif_trans_update(dev);

tar cvf /usr/lib/vmware/modules/source/vmnet.tar vmnet-only/
vmware-modconfig --console --install-all

vmnet-only/netif.c:464:7: error: ‘struct net_device’ has no member named ‘trans_start’
    dev->trans_start = jiffies;

https://www.visibil.it/blog/2017/10/5/vmware-workstation-12-and-centos-7


https://www.unixmen.com/install-vmware-10-centos-7/
https://stackoverflow.com/questions/24921593/installation-of-vmware-workstation-10-0-1-on-centos-7
http://www.voidcn.com/article/p-ofiwnxuj-bmb.html
https://communities.vmware.com/thread/484273

vmware-modconfig --console --install-all

在 CentOS 7
目的,想用 ESXi client 來連
12 可以連上,必須用一般使用者身分

11
Vmware workstation 可以連上,netif.c 要改,exactVersion>6.0.0</exactVersion
ESXi client 不能連
32 bit guest 可以開,64 bit guest 不能開機

10
vmware-workstation-server 無法啟動,netif.c 要改

2019年1月8日 星期二

洋垃圾 Xeon E5-2660 使用

和小孩換來一套  Xeon(R) CPU E5-2660 的系統,使用華南 X79 主機板 V 2.47,原來跑得好好的,不曉得碰到什麼,就壞了,無法開機。無法確定只是主機板壞掉,或是 CPU 也壞了,只好上網先買一張新板子來試,若不行,就只好再買 CPU 了。

在露天花了一些時間搜尋,找到一定比較便宜,而且和原來的板子比較接近的產品。因為急著想知道結果,就直接約下班去當面交易。

新版的板子,比舊的好很多,支援 PCI-e 的 SSD,這樣我手邊多的 Intel 600P SSD 就能派上用場了。Intel 600P SSD 的 [連續寫入速度] 只有 560MB/s,可是 [連續讀取速度] 有 1775MB/s,是 SATA界面 SSD 的3倍,爽度 3倍。可惜,裝了散熱片後,和顯卡略干涉,只好挪顯卡。另外,USB 3.0 接頭的位置也改了,接線不用接得老遠。

新買的是華南 X79 主機板 V 2.49,它的手冊只有薄薄幾頁,可是已經比 V2.47 只有薄薄一張黑白印刷的說明書,進步很多了。雖然這板子用的人很多,要找說明書還真難找。這次就先把它掃描留存起來,以供日後參考。






Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz,顯示 16 個 threads,看起來就爽。不過是好幾年前的產品,效能不到 2018 年 CPU 的一半。像在 Gentoo 下,emerge 一個龐大的 package,如 sys-devel/llvm 或 dev-qt/qtwebengine,就要多一倍的時間。但也別太要求效能,這本來就是當初給伺服器用的,比較適合架站,同時跑多個 VM (Virtual Machine)。


2018年12月28日 星期五

Gentoo 使用 soft raid

參考 https://wiki.gentoo.org/wiki/Complete_Handbook/Software_RAID

要加上 kernel modules
raid0, 或其他的

移除舊的 disk array
mdadm --stop /dev/md0
mdadm --remove /dev/md0
建立由 2 顆硬碟構成 mirror 的 disk array
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
蠻奇怪的,原先並未先建立 partition,直接用 /dev/sdd 及 /dev/sde,建好的 array 會不見,查到的一些資料,是用 /dev/sdd1 及 /dev/sde1,那就試試看先建 partition,再建 raid。
這裡有人討論使用整顆硬碟與分割區來建立 raid 的差別,What's the difference between creating mdadm array using partitions or the whole disks directly

檢視 disk array 建立的進度
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md0 : active raid1 sde1[1] sdd1[0]
      7813893440 blocks super 1.2 [2/2] [UU]
      [=>...................]  resync =  6.2% (489861248/7813893440) finish=678611.9min speed=179K/sec
      bitmap: 58/59 pages [232KB], 65536KB chunk

unused devices: <none>


檢視 disk array 的細節
# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Dec 28 21:58:07 2018
        Raid Level : raid1
        Array Size : 7813894464 (7451.91 GiB 8001.43 GB)
     Used Dev Size : 7813894464 (7451.91 GiB 8001.43 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sat Dec 29 16:57:35 2018
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : aj-i7:0  (local to host aj-i7)
              UUID : 6240fb09:05a34525:822baca9:8744a832
            Events : 13861

    Number   Major   Minor   RaidDevice State
       0       8       48        0      active sync   /dev/sdd
       1       8       64        1      active sync   /dev/sde

要把硬碟加回 disk array 時
mdadm /dev/md1 --re-add /dev/sda2
使用 mdadm --assemble 指令,可以重新 Assemble 先前建立的 array。

使用上,不用建立分割區,直接 mkfs.ext4 /dev/md0 即可。

使用的問題

剛開始使用,還不熟悉,常常不曉得 disk array 在那裡。
建好後,隔幾天又找不到 raid 了,
# mdadm --detail /dev/md0
mdadm: Array associated with md device /dev/md0 does not exist.
一直以為它又死了,再看 proc 的 status,卻又存在
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md127 : active (auto-read-only) raid1 sdd1[0] sde1[1]
      7813893440 blocks super 1.2 [2/2] [UU]
      bitmap: 0/59 pages [0KB], 65536KB chunk

unused devices: <none>
後來用 scan,終於找到了,不曉得怎麼改名了,改名的規則也不知是什麼。

# mdadm --detail --scan
ARRAY /dev/md/aj-i7:0 metadata=1.2 name=aj-i7:0 UUID=c984ff63:4925d7b3:d8922bdc:e9cc0d57

# ls -l /dev/md*
brw-rw---- 1 root disk 9,   0  2月 13 10:06 /dev/md0
brw-rw---- 1 root disk 9, 127  2月 13 10:06 /dev/md127

/dev/md:
總計 0
lrwxrwxrwx 1 root root 8  2月 13 10:06 aj-i7:0 -> ../md127

還在慢慢的適應這個玩意中。


Gentoo 使用 lm_sensors

參考 http://linux.vbird.org/linux_basic/0610hardware/0610hardware-fc4.php

# emerge -av sys-apps/lm_sensors

# sensors-detect
Scan for sensors of south bridges, CPUs or memory controllers
Intel digital thermal sensor...                             Success!
    (driver `coretemp')
Scan for Super I/O sensors
Found `Nuvoton NCT6793D Super IO Sensors'                   Success!
    (address 0x290, driver `nct6775')

probe the I2C/SMBus adapters now? (YES/no): 
Using driver `i2c-i801' for device 0000:00:1f.4: Kaby Lake (PCH)
Module i2c-dev loaded successfully.

Now follows a summary of the probes I have just done.
Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

Driver `nct6775':
  * ISA bus, address 0x290
    Chip `Nuvoton NCT6793D Super IO Sensors' (confidence: 9)

執行 etc-update,寫入設定檔,其所產生的 /etc/modules-load.d/lm_sensors.conf,。如下
# Generated by sensors-detect on Fri Dec 28 19:43:42 2018
coretemp
nct6775

要重新編譯 kernel,make xconfig 或 make menuconfig,加上下面兩個 driver module。
在 Device Drivers/Hardware Monitor Support 項目下
Intel Core/Core2/Atom temperature sensor (SENSORS_CORETEMP)
Nuvoton NCT6775F and compatibles (SENSORS_NCT6775)

 # make -j8 && make modules_install && make install

2018年12月21日 星期五

使用 rclone 同步雲端硬碟

原來是使用 net-misc/drive 的 Google Drive client 來同步 Google 的雲端硬碟。可是在使用 push 指令來 sync 整個目錄時,會一直出現很多個重複的目錄,例如
ds +- etc/a.txt
   +- etc/b.txt
   +- etc/....

好像也沒有辦法避免這種困擾,猜想在進行同步時,是可以平行上傳檔案,而 Google drive 是以 unique id 來代表,如下列網址代表 [我的雲端硬碟 > ds > etc] 的目錄
https://drive.google.com/drive/folders/1TNCFVIHv8wzcOvAt2q0xq7VL2TyFzJfe?ogsrc=32
後來,找到 rclone 這個程式,可以指定一次傳一個檔案,就可以解決上述問題。另外,這個程式看起來,更成熟完備一點。

sync 的指令
rclone sync "dspace.calendar/etc/" "gDspace:GET_proj/dspace_backup/dspace.calendar/etc" -v -u --fast-list -P --checkers 1 --transfers 1
要注意目錄的表示法,不然會 sync 到上一層或下層目錄。

備份的畫面
2018-12-22 10:53:35 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-0-1.jpg: Copied (new)
2018-12-22 10:53:41 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-1-0.jpg: Copied (new)
2018-12-22 10:53:43 INFO  : assetstore/11/01/26/110126386227520817426129509087509376115_dir/00001/TileGroup0/1-1-1.jpg: Copied (new)
Transferred:      694.862M / 1.385 GBytes, 49%, 213.906 kBytes/s, ETA 57m44s
Errors:                 0
Checks:               155 / 155, 100%
Transferred:          547 / 10549, 5%
Elapsed time:    55m26.3s
Transferring:
 *     assetstore/11/01/26/…TileGroup0/2-0-0.jpg: 100% /10.567k, 0/s, -


2018年12月20日 星期四

在 Gentoo 啟動 Vmware Workstation Server

首先使用  stefantalpalaru 的 gentoo-overlay/app-emulation/ 安裝 vmware-workstation-15.0.2.10952284-r2。USE flag 主要為 "server -bundled-libs"。

產生憑證

要產生憑證,參考 Create Self-Signed Certificates
建立 openssl.cnf
[req]
default_bits            = 2048
default_keyfile         = rui.key
distinguished_name      = req_distinguished_name
#Don't encrypt the key
encrypt_key             = no
prompt                  = no
string_mask             = nombstr

[ req_distinguished_name ]
countryName             = US
stateOrProvinceName     = California
localityName            = Palo Alto
0.organizationName      = VMware, Inc.
emailAddress            = ssl-certificates@vmware.com
commonName              = localhost.localdomain
然後執行指令
openssl req -nodes -new -x509 -keyout rui.key -out rui.crt -days 3650 -config openssl.cnf
再將 rui.crt 和 rui.key 複製到 /etc/vmware/ssl/ 的目錄下。

其實在 trace 安裝的程式檔後,發現不用這麼麻煩,在安裝的 /etc/init.d/vmware-workstation-server 中,即有檢查和產生憑證的指令
# Check if certificates exist.  If not, we need to generate them, ala sshd.
if [ ! -e /etc/vmware/ssl/rui.key -o ! -e /etc/vmware/ssl/rui.crt ]; then
    checkpath -d -m 0600 /etc/vmware/ssl
    openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/vmware/ssl/rui.key -out /etc/vmware/ssl/rui.crt -config /etc/vmware/ssl/hostd.ssl.config
    checkpath -f -m 0600 /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.crt
fi

程建立 service

參考 /etc/init.d/vmware-workstation-server,建立 /lib/systemd/system/vmware-workstation-server.service
[Unit]
Description=VMware Workstation Server
Wants=vmware-authentication.service
Wants=vmware.target

[Service]
Type=simple
PIDFile=/var/run/vmware/vmware-hostd.PID
#ExecStartPre=/opt/vmware/sbin/vmware-authdlauncher
ExecStart=/opt/vmware/bin/vmware-hostd -a -d /etc/vmware/hostd/config.xml

Restart=on-abort

[Install]
WantedBy=multi-user.target
在 terminal 中,以 root 的身分執行 vmware,會出現下列錯誤 
/opt/vmware/lib/vmware/bin/configure-hostd.sh: line 15: rc-service: command not found

rc-service 的指令,那是 OpenRC 的指令,查詢 service 的 status。後來在 CentOS 7 安裝,參考安裝後的程式,確認其功能,若是啟動則傳回 on,否則為 off。

修改 /opt/vmware/lib/vmware/bin/configure-hostd.sh,把 rc-service 的指令改成 systemctl。
#!/bin/bash

action="$1"

case $action in
  add)
    #rc-update -q add vmware-workstation-server default
    #rc-service vmware-workstation-server start
    systemctl -q enable vmware-workstation-server
    systemctl -q start vmware-workstation-server
    ;;
  remove)
    #rc-update -q del vmware-workstation-server default
    #rc-service vmware-workstation-server stop
    systemctl -q disable vmware-workstation-server
    systemctl -q stop vmware-workstation-server
    ;;
  status)
    # rc-service -q vmware-workstation-server status
    systemctl -q is-active vmware-workstation-server && echo on || echo off
    ;;
  *)
    exit 1
    ;;
esac
另外,可能出現下列錯誤,設定環境變數 export VMWARE_USE_SHIPPED_GTK=force,可解決問題
/opt/vmware/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/lib64/libproxy.so.1)
Failed to load module: /usr/lib/gio/modules/libgiolibproxy.so
後來,將 app-emulation/vmware-workstation 的 use flag 的 bundled-libs 拿掉,就不再出現上述錯誤。

在 /opt/vmware/bin 少了 vmware-vim-cmd,自行解壓 VM*.bundle,然後從 vmware-workstation-server 下 copy 過來。執行後,出現下列錯誤。
$ vmware-vim-cmd
filename:       /lib/modules/4.14.83-gentoo/misc/vmmon.ko
supported:      external
license:        GPL v2
description:    VMware Virtual Machine Monitor.
author:         VMware, Inc.
depends:        
retpoline:      Y
name:           vmmon
vermagic:       4.14.83-gentoo SMP mod_unload 
[AppLoader] Cannot get library dependencies. (4c)

[AppLoader] Fallback to use all shipped libraries.
[AppLoader] Cannot get library dependencies. (4c)

[AppLoader] Fallback to use all shipped libraries.
[AppLoader] Fail to launch with shipped libraries.
Fail to load executable. Exiting.
錯誤資訊在 /tmp/vmware-ajax 下,內容如下
$ cat vmware-apploader-9054.log
2019-01-28T11:04:53.416+08:00| appLoader| I125: Log for appLoader pid=9054 version=15.0.2 build=build-10952284 option=Release
2019-01-28T11:04:53.416+08:00| appLoader| I125: The process is 64-bit.
2019-01-28T11:04:53.416+08:00| appLoader| I125: Host codepage=UTF-8 encoding=UTF-8
2019-01-28T11:04:53.416+08:00| appLoader| I125: Host is Linux 4.14.83-gentoo Gentoo Base System release 2.6
2019-01-28T11:04:53.416+08:00| appLoader| W115: Unable to get output of command "/usr/bin/lsb_release -sd 2>/dev/null"
2019-01-28T11:04:53.416+08:00| appLoader| I125: Invocation: "/opt/vmware/lib/vmware/bin/vmware-vim-cmd"
2019-01-28T11:04:53.416+08:00| appLoader| I125: Calling: "/opt/vmware/lib/vmware/bin/vmware-vim-cmd"
2019-01-28T11:04:53.416+08:00| appLoader| I125: VMDEVEL not set.
2019-01-28T11:04:53.416+08:00| appLoader| I125: Using configuration file: /etc/vmware/config
2019-01-28T11:04:53.416+08:00| appLoader| I125: Use library directory: /opt/vmware/lib/vmware
2019-01-28T11:04:53.416+08:00| appLoader| I125: Setup root library: /opt/vmware/lib/vmware/bin/vmware-vim-cmd
2019-01-28T11:04:53.417+08:00| appLoader| I125: Try libraries from cached path.
2019-01-28T11:04:53.417+08:00| appLoader| E110: ldd(1) failed with errno 24: Too many open files (3,-1)
2019-01-28T11:04:53.417+08:00| appLoader| E110: ldd(1) failed with errno 24: Too many open files (4,-1)
2019-01-28T11:04:53.417+08:00| appLoader| I120: Fallback to use all shipped libraries.
2019-01-28T11:04:53.417+08:00| appLoader| E110: Fail to launch with shipped libraries.
2019-01-28T11:04:53.417+08:00| appLoader| W115: Unable to load dependencies for /opt/vmware/lib/vmware/bin/vmware-vim-cmd
2019-01-28T11:04:53.417+08:00| appLoader| W115: Unable to execute /opt/vmware/lib/vmware/bin/vmware-vim-cmd
上述 log 有兩個錯誤,第一個是缺少 lsb-release 指令,只要 emerge -av sys-apps/lsb-release 安裝即可。

另外一個是是
SSetup root library: /opt/vmware/lib/vmware/bin/vmware-vim-cmd

與 CentOS 下正常運作的結果比較,應該是
Setup root library: /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so
而 libvmware-vim-cmd.so 是一個指到 libvmware-hostd.so 的 link
# ls -l /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so 
lrwxrwxrwx. 1 root root 57  1月 27 15:21 /usr/lib/vmware/lib/libvmware-vim-cmd.so/libvmware-vim-cmd.so -> /usr/lib/vmware/lib/libvmware-hostd.so/libvmware-hostd.so

其實,/opt/vmware/lib/vmware/bin 下的執行檔,大多是指到 appLoader 的symbolic link,如 vmware,vmware-hostd 等。然而,像執行 /opt/vmware/bin/vmware-hostd 時,都可以正確的Setup root library,唯獨 vmware-vim-cmd 不行,真是詭異。

最後確認,只要建立正確的 symbolic link 即可。只是在嘗試的過程中,建立的 link 是錯的,就一直失敗。
# ln -sf /opt/vmware/lib/vmware/lib/libvmware-hostd.so/libvmware-hostd.so libvmware-vim-cmd.so/libvmware-vim-cmd.so

後來發現很早以前,自己就曾整理過相關資料了,Enable Vmware Workstation Server。

systemctl stop vmware-workstation-server.target 時,自動開機的 VM 會自動關閉。不過VM 必須安裝 vmware tool。
# systemctl status vmware-hostd.service
 vmware-hostd.service - VMware Workstation Server
   Loaded: loaded (/lib/systemd/system/vmware-hostd.service; static; vendor preset: disabled)
   Active: deactivating (stop) since Tue 2019-01-29 12:51:41 CST; 18s ago
  Process: 30743 ExecStartPre=/bin/sh /opt/vmware/lib/vmware/bin/check-certificates.sh (code=exited, status=0/SUCCESS)
 Main PID: 30774 (vmware-hostd); Control PID: 31034 (sh)
    Tasks: 37 (limit: 4915)
   Memory: 3.0G
   CGroup: /system.slice/vmware-hostd.service
           ├─30774 /opt/vmware/lib/vmware/bin/vmware-hostd -a /etc/vmware/hostd/config.xml
           ├─30837 /opt/vmware/lib/vmware/bin/vmware-vmx -s sched.group= -# product=1;name=VMware Workstation;version=15.0.2;buildnumber=10>
           ├─31034 /bin/sh /opt/vmware/lib/vmware/bin/shutdown-autostart-vm.sh
           └─31052 /opt/vmware/lib/vmware/bin/vmware-vim-cmd -U root hostsvc/autostartmanager/autostop

 1月 29 12:51:41 aj-i7 sh[31034]: filename:       /lib/modules/4.14.83-gentoo/misc/vmmon.ko
 1月 29 12:51:41 aj-i7 sh[31034]: supported:      external
 1月 29 12:51:41 aj-i7 sh[31034]: license:        GPL v2
 1月 29 12:51:41 aj-i7 sh[31034]: description:    VMware Virtual Machine Monitor.
 1月 29 12:51:41 aj-i7 sh[31034]: author:         VMware, Inc.
 1月 29 12:51:41 aj-i7 sh[31034]: depends:
 1月 29 12:51:41 aj-i7 sh[31034]: retpoline:      Y
 1月 29 12:51:41 aj-i7 sh[31034]: name:           vmmon
 1月 29 12:51:41 aj-i7 sh[31034]: vermagic:       4.14.83-gentoo SMP mod_unload
 1月 29 12:51:42 aj-i7 /opt/vmware/lib/vmware/bin/vmware-hostd[30774]: Accepted password for user root from ::1

安裝完之後,/etc/vmware/netmap.conf 有網路的設定,不然 VM 會沒網路
# This file is automatically generated.
# Hand-editing this file is not recommended.
network0.name = "Bridged"
network0.device = "vmnet0"
network1.name = "HostOnly"
network1.device = "vmnet1"
network2.name = "NAT"
network2.device = "vmnet8"

還有要執行
emerge --config app-emulation/vmware-workstation
但很奇怪,執行之後,netmap.conf 的內容會不見

2018年12月18日 星期二

複製 CentOS 5 系統

老掉牙的系統,但為了讓系統繼續撐著,要想辦法轉成 VM。可以使用 Vmware 的 Converter 程式來將實體機轉成 VM。不幸的是,並非總是能成功的使用 Converter 來轉成 VM,我要轉的系統即是此種不成功的例子。既然如此,就藉此機會來練功一下,學習如何手動移轉 Linux 系統,不用重新安裝。

備份檔案

要複製系統的硬碟,視自己的狀況,可以直接接上電腦,也可以用 USB 界面連接。
首先,依據原系統的規劃及使用狀況,在新的硬碟上,建立分割區。由於 CentOS 5 的 bootloader 使用 GNU GRUB 0.97,硬碟的 partition table 只能用 MBR ,不能使用 GPT。

我所用的硬碟分割規劃如下
檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda3            23G   16G  6.3G  72% /
/dev/sda5            19G  6.9G   11G  40% /home
/dev/sda1           243M   26M  205M  12% /boot
/dev/sda6           244G  170G   62G  74% /opt
然後,依次複製每個分割區的檔案,其中 -xdev 的選項,是只讀取該分割區的檔案。
mount /dev/sda1 /mnt/hdd
cd /boot
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mmount /dev/sda3 /mnt/hdd
cd /
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd

mount /dev/sda5 /mnt/hdd
cd /home
find ./ -xdev -print0 | cpio -pa0V /mnt/hdd
針對要複製的目錄,重複執行上述步驟。

重建 initrd

要下載 CentOS 5.x 的 ISO 來執行 linux rescue
重建 initrd 才行
mkdir /mnt/sysimage
mount /dev/sda3 /mnt/sysimage

mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
chroot /mnt/sysimage

mount /dev/sda1 /boot
cp -p /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
mkinitrd -f -v /boot/initrd-2.6.18-371.el5.img 2.6.18-371.el5
用不同版本的 CentOS 或其他的 Linux OS 所建立的 initrd,在開機時,會出現錯誤。下圖是使用原來的 initrd 所出現的錯誤,無法找到 swap 分割區。

設定 grub

執行及進入 grub 後
grub> root (hd0,0)
grub> setup (hd0)
修改 grub.conf,重新開機。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-400.1.1.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-400.1.1.el5 ro root=UUID=bfe28135-6004-4078-ae40-14dbbf727354 rhgb quiet
    initrd /initrd-2.6.18-400.1.1.el5.img
title CentOS (2.6.18-92.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet
    initrd /initrd-2.6.18-92.el5.img
在 grub 中,硬碟編號由 hd0 開始。root 是設定系統的分割區,可以用 root=/dev/sda3,也可以用 label 或 uuid。用 /dev/sda3 來指定,當接線改變,或硬碟編號改變,會有找不到 root device 的困擾,用 uuid 則可確保找到正確的分割區。使用指令 blkid,可以列出分割區的 uuid。


網誌存檔