關(guān)于本系列
  
    通常,UNIX® 管理員都擁有一套常用的輔助進程管理的實用工具、訣竅和系統(tǒng)。本文提供了各種用于簡化各個過程的關(guān)鍵實用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統(tǒng),而大部分的訣竅則來源于長期的經(jīng)驗積累和減輕系統(tǒng)管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環(huán)境中可用的工具,包括簡化異類環(huán)境中的管理任務(wù)的方法。
  
  移動 UNIX 目錄或文件系統(tǒng)
  
    在許多情況下,您可能需要將 UNIX 文件系統(tǒng)從一個設(shè)備或硬盤分區(qū)移動到另一個設(shè)備或硬盤分區(qū),或者需要移動文件系統(tǒng)中的內(nèi)容以釋放所占用的空間,在處理這些情況的過程中,都需要創(chuàng)建新的文件系統(tǒng)??赡苁且驗樵O(shè)備將會出現(xiàn)故障,或者僅僅只是耗盡了空間。您可以在運行于單用戶模式的系統(tǒng)或者活動的 和運行的系統(tǒng)(需要確保文件在移動的過程中仍然可用)中完成這項任務(wù)。
  
    在后面的這種情況下,即對活動的文件系統(tǒng)進行遷移時,您可能需要在某個應(yīng)用程序運行的過程中對其進行移動。對于上面的這兩種情況,您可能需要移動與系統(tǒng)相關(guān)的文件系統(tǒng)(如 /usr 或 /var),無論是否運行于單用戶模式,該文件系統(tǒng)都有可能正在被使用。
  
    在任何文件系統(tǒng)的移動操作中,您必須確保正確地將數(shù)據(jù)復(fù)制到新的目標(biāo)。作為一個典型的示例,假定您的系統(tǒng)的文件/磁盤布局和使用情況如清單 1 所示。
  
清單 1. 示例文件/磁盤布局和使用情況




Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3 7692908 6467756 1225152 84% /
udev 517560 184 517376 1% /dev
/dev/hda1 115377640 1743668 107773060 2% /var/lib/mysql
/dev/hdb1 115380192 14604460 94914696 14% /export/data
/dev/hde1 96132940 3962940 87286644 5% /export/home
/dev/hde4 22960280 133484 21660480 1% /tmp
none 517560 0 517560 0% /dev/shm



  
    正如您在清單 1 中所看到的,根文件系統(tǒng)已使用了百分之八十四,您可能應(yīng)該將處于單個分區(qū)的根文件系統(tǒng)中的目錄移動到新的分區(qū)或設(shè)備,以確保根文件系統(tǒng)不會被占滿。
  
    最好是移動顯著影響希望釋放空間的文件系統(tǒng)中的具有特定用途的單個目錄。例如,在這個示例中,您可能希望將 /var 或 /usr 目錄移動到它自己的文件系統(tǒng)。移動多個更小的目錄,效率會比較低。您所需要做的只是輕松地移動單個目錄以釋放所占用的空間。
  
    在有些情況下,您可能需要將現(xiàn)有的分區(qū)移動或復(fù)制到一個新的位置(例如,在設(shè)備可能出現(xiàn)故障的情況下)。這里,已經(jīng)解釋了究竟是應(yīng)該選擇目錄還是現(xiàn)有的文件系統(tǒng)。
  
    在本文中,假設(shè)您已經(jīng)添加了一個新的硬盤設(shè)備或具有備用的硬盤設(shè)備或分區(qū),以用作目錄或文件系統(tǒng)的移動目標(biāo)。
  
  移動數(shù)據(jù)的快速指導(dǎo)
  
    移動文件系統(tǒng)或?qū)F(xiàn)有的目錄移動到新的文件系統(tǒng),基本操作序列如下:
  
  選擇要進行復(fù)制的數(shù)據(jù)。
  創(chuàng)建一個新的分區(qū)。
  在該分區(qū)上創(chuàng)建一個新的文件系統(tǒng)。
  將該分區(qū)裝入到一個臨時目錄。
  將數(shù)據(jù)復(fù)制到這個臨時目錄。
  對原始目錄進行重命名。
  創(chuàng)建新的裝入點。
  裝入這個文件系統(tǒng)。



    理想情況下,在完成這些操作之后,您應(yīng)該重新啟動計算機,盡管這并不總是必需的或可能的,但是應(yīng)該在允許的情況下盡早重新啟動計算機。


    讓我們對序列中的每個步驟進行更仔細(xì)的研究。
  
  創(chuàng)建新的分區(qū)和文件系統(tǒng)
  
    在創(chuàng)建新的分區(qū)和文件系統(tǒng)之前,首先確??捎么笮『涂臻g與要移動到新的文件系統(tǒng)中的文件/目錄的大小相匹配。要完成這項工作,最簡單的方法是使用 du 工具來確定當(dāng)前文件/目錄的大小。例如,如果您打算對示例系統(tǒng)中的 /usr 目錄進行移動,可以使用如清單 2 所示的命令。
    
清單 2. 移動示例系統(tǒng)中的 /usr 目錄




$ du -sk /usr
3923068 /usr



    -s 選項確保生成整個目錄的摘要信息,而不是所有內(nèi)容的信息,并且 -k 選項確保以 KB 為單位顯示目錄大小。從上面的輸出結(jié)果中您可以確定,需要至少 4GB 大小的新的分區(qū)。
  
    如果您將現(xiàn)有的文件系統(tǒng)(而不是現(xiàn)有的文件系統(tǒng)中的單個目錄)移動到一個更大的分區(qū),那么可以使用 df 的輸出來確定當(dāng)前文件系統(tǒng)的大小。
  
    在知道了其大小之后,理想情況下,您應(yīng)該創(chuàng)建一個比所需大小大百分之二十五的新的分區(qū),并且至少要大百分之十。對于上面的示例文件系統(tǒng),您至少需要創(chuàng)建一個 5GB 大小的新的分區(qū)。
  
    要創(chuàng)建新的分區(qū)和文件系統(tǒng),需要使用適合于您的操作系統(tǒng)的工具。例如:
  
    在 Linux® 中,您需要使用 fdisk 對物理硬盤上的各個分區(qū)進行配置,并使用 mke2fs 或 mkfs.* 創(chuàng)建命令中的一個,以便在新的分區(qū)上創(chuàng)建合適的文件系統(tǒng)。



  在 Solaris SPARC 系統(tǒng)中,可以使用 format 來創(chuàng)建并配置分區(qū)。在 Solaris x86 系統(tǒng)中,在使用 format 對 Sun 分區(qū)表進行配置之前,您可能還需要使用 fdisk 來配置磁盤分區(qū)。然后,您可以使用 newfs(或某個文件系統(tǒng)特定的命令)來創(chuàng)建文件系統(tǒng)。



    在 AIX® 中,可以使用 mkvg、chpv 或某個其他的卷管理工具為新的分區(qū)創(chuàng)建合適的分區(qū)或卷組。然后,可以使用 crfs 創(chuàng)建文件系統(tǒng)。



  創(chuàng)建了文件系統(tǒng)之后,在對數(shù)據(jù)進行復(fù)制時,需要在進行載入的新文件系統(tǒng)中創(chuàng)建一個新的目錄。例如,我個人喜歡在相似的位置創(chuàng)建新的文件系統(tǒng),并且通過名稱將其標(biāo)識為臨時文件系統(tǒng)。
  
  對于上面的 /usr 示例,我將創(chuàng)建一個新的目錄 /mnt/usr.tmp,并將新的文件系統(tǒng)載入到該目錄。
  
  復(fù)制信息
  
    事實上,復(fù)制信息可能是整個過程中最簡單的部分,但是選擇合適的工具將直接影響到信息傳輸?shù)挠行院托?。然而,您?yīng)該確保將文件復(fù)制到正確的位置,要避免覆蓋現(xiàn)有的數(shù)據(jù)。
  
    有許多種不同的方法可以完成這個任務(wù),但是主要的兩種解決方案是使用基本的 cp 工具或 tar 工具。前者是一種非??焖俚姆椒ǎ窃谀承┎僮飨到y(tǒng)中,對于一些非標(biāo)準(zhǔn)的文件,如管道和設(shè)備,可能會出現(xiàn)問題。tar 工具可能是一種速度較慢的替代方法,但是在傳輸其他類型的文件時,它更加可靠并且提供了關(guān)于復(fù)制過程的更加可視化的反饋信息。
  
    無論您使用哪一種方法,都應(yīng)該確保不要對源文件系統(tǒng)中的任何文件進行更新。請記住,您所建立的任何副本僅包含在進行復(fù)制操作時對應(yīng)的文件中所包含的數(shù)據(jù)。如果在進行復(fù)制的過程中對該文件系統(tǒng)中的文件進行了更新,那么新的文件系統(tǒng)中的文件可能是不完整的并且受到了損壞。
  
  使用 cp
  
    cp 工具提供了一個遞歸復(fù)制選項 (-r),使用該選項可以將所有的文件、目錄以及這些目錄中的文件全部復(fù)制到目標(biāo)。您還可以使用 -p 選項來保持所有權(quán)和復(fù)制的文件的權(quán)限。如果您希望確保新的文件系統(tǒng)保留源文件系統(tǒng)的安全細(xì)節(jié),那么這是至關(guān)重要的。在大多數(shù)情況下,這樣做是必須的。
  
    要將文件從現(xiàn)有的目錄復(fù)制到新的位置,請執(zhí)行以下步驟:
  
    改變到新的目標(biāo)目錄并確認(rèn)位于正確的位置(請參見清單 3)。
    
  清單 3. 改變目標(biāo)目錄




$ cd /mnt/usr.tmp
$ pwd
/mnt/usr.tmp



  
    將文件從舊的目錄復(fù)制到當(dāng)前(新的)目錄,如清單 4 所示。
  
    清單 4. 將文件復(fù)制到新的目錄




$ cp -pr /usr/* .



    您應(yīng)該進行快速的驗證以確保成功地復(fù)制了這些文件。簡單的 ls 即可以得到清楚的指示(請參見清單 5)。稍后您將了解到更詳細(xì)的檢查方法。
    
  清單 5. 驗證成功地復(fù)制了這些文件




$ ls -l /usr
total 238
drwxr-xr-x 2 root bin 1024 Apr 20 13:11 4lib/
lrwxrwxrwx 1 root root 5 Apr 20 12:40 5bin -> ./bin/
lrwxrwxrwx 1 root root 9 Apr 20 12:34 X -> ./openwin/
drwxr-xr-x 6 root bin 512 Apr 20 12:42 X11/
lrwxrwxrwx 1 root root 3 Apr 20 12:41 X11R6 -> X11/
lrwxrwxrwx 1 root root 10 Apr 20 13:03 adm -> /var/adm/
drwxr-xr-x 10 root bin 512 Apr 20 12:59 apache/
drwxr-xr-x 8 root bin 512 Apr 20 12:47 apache2/
drwxr-xr-x 8 root bin 512 Apr 20 12:53 appserver/
drwx—— 8 root bin 512 Apr 20 12:53 aset/
drwxr-xr-x 4 root bin 16384 Apr 20 13:17 bin/
drwxr-xr-x 4 root bin 512 Apr 20 12:33 ccs/

lrwxrwxrwx 1 root root 10 Apr 20 12:32 tmp -> /var/tmp/
drwxr-xr-x 4 root bin 2048 Apr 20 13:00 ucb/
drwxr-xr-x 4 root bin 512 Apr 20 13:17 ucbinclude/
drwxr-xr-x 3 root bin 1024 Apr 20 13:17 ucblib/
drwxr-xr-x 7 root bin 512 Apr 20 13:03 vmsys/
drwxr-xr-x 5 root bin 512 Apr 20 12:44 xpg4/
drwxr-xr-x 3 root bin 512 Apr 20 12:40 xpg6



  如果您發(fā)現(xiàn)沒有正確地復(fù)制某些文件或者符號鏈接和其他特殊類型的文件,那么您可能需要嘗試使用 tar。
  
  使用 tar
  
   與 cp 相比,tar 工具提供了許多的好處。首先,也是最重要的,對于非標(biāo)準(zhǔn)的文件類型,它通常更加可靠。其次,因為它能夠提供關(guān)于復(fù)制的文件的可視化反饋信息,所以使用它將文件復(fù)制到新的系統(tǒng)會更加方便。最后一點也非常重要,您可以使用 tar 創(chuàng)建文件系統(tǒng)的存檔文件,萬一在出現(xiàn)問題時,該文件可以作為源目錄/文件系統(tǒng)的備份。在處于單用戶模式的計算機的用戶文件系統(tǒng)中,這種 tar 文件方法可以用來創(chuàng)建新的文件系統(tǒng)內(nèi)容,而無需將新的目標(biāo)裝入到臨時目錄裝入點。
  
    使用 tar 進行文件復(fù)制的最好的方法是,通過管道將 tar 創(chuàng)建的文件傳遞到位于新的位置進行文件提取的另一個 tar。清單 6 中給出了一個這樣的示例。
  
  
  清單 6. 使用 tar 進行文件復(fù)制




$ cd /usr
$ tar cfp – ./* |(cd /mnt/usr.tmp; tar xvfp -)



   第一個 tar 中的 c 參數(shù)告訴 tar 創(chuàng)建一個存檔。v、f 和 p 選項分別指定輸出詳細(xì)信息(顯示正在添加或提取的文件)、對文件(而不是磁帶設(shè)備)進行寫入/讀取、保持權(quán)限和所有權(quán)。
  
   清單 6 中的命令行能夠正常工作,這是因為在管道的后半部分中,在從標(biāo)準(zhǔn)輸入讀取管道的前半部分中創(chuàng)建的 .tar 文件之前,首先改變到了目標(biāo)目錄。
  
    如果您需要創(chuàng)建一個 .tar 文件并使用這種方法,而不是執(zhí)行直接的復(fù)制,那么您必須擁有一個能夠容納源目錄中所有文件的文件系統(tǒng)。清單 7 介紹了進行復(fù)制的過程。
    
清單 7. 進行復(fù)制的過程




$ cd /usr
$ tar cfp /tmp/usr.tar ./*
$ cd /mnt/usr.tmp
$ tar xvfp /tmp/usr.tar



  無論使用哪一種解決方案,您將在每個文件復(fù)制到/復(fù)制出存檔文件時獲得相應(yīng)的報告,假設(shè)您使用了 v 命令行選項(請參見清單 8)。
    
清單 8. 打印出復(fù)制過程




a ./4lib/ 0K
a ./4lib/libX.so.1.0 symbolic link to ./libX11.so.4.3
a ./4lib/libX11.so.4.3 216K
a ./4lib/libXaw.so.4.0 208K
a ./4lib/libXmu.so.4.0 72K
a ./4lib/libXol.so.3.1 1056K
a ./4lib/libXt.so.4.1 264K
a ./4lib/libce.so.0.0 48K
a ./4lib/libdeskset.so.0.1 64K
a ./4lib/libdga.so.1.0 40K
a ./4lib/libhelp.so.1.0 24K
a ./4lib/libolgx.so.3.1 56K
a ./4lib/libtt.so.1.1 848K
a ./4lib/libttstub.so.1.1 32K
a ./4lib/libxview.so.3.73 1328K
a ./4lib/libdl.so.1.0 symbolic link to //lib/libdl.so.1
a ./4lib/libc.so.1.9 403K
a ./4lib/libc.so.2.9 402K



  使用 tar 和直接文件系統(tǒng)交換
  
    要將文件系統(tǒng)的內(nèi)容復(fù)制到新的位置,而無需創(chuàng)建臨時裝入點,您必須首先擁有足夠容納源目錄中所有文件的空間。
  
    如果使用新的文件系統(tǒng)來替代一個目錄,可以執(zhí)行以下操作:
  
    和前面一樣,創(chuàng)建新的分區(qū)和文件系統(tǒng)。



    創(chuàng)建源目錄的 .tar 文件(請參見清單 9)。
  
  
  清單 9. 創(chuàng)建 .tar 文件


$ cd /home
$ tar cfvp /tmp/home.tar

  對源目錄進行重命名(請參見清單 10)。
    
  清單 10. 對源目錄進行重命名


$ cd ..
$ mv home home.old

  
    創(chuàng)建目錄,并將其權(quán)限和所有權(quán)設(shè)置為與原始目錄相同。
    將新的文件系統(tǒng)裝入到這個新的目錄。
    提取 .tar 文件(請參見清單 11)。
  
  
  清單 11. 提取 .tar 文件


$ cd home
$ tar xvfp /tmp/home.tar

    如果您需要為現(xiàn)有的文件系統(tǒng)改變分區(qū)(如清單 10 中所示),那么命令序列是類似的,但是您需要卸載現(xiàn)有的文件系統(tǒng),而不是對目錄進行重命名(請參見清單 12)。
  
  
清單 12. 為現(xiàn)有的文件系統(tǒng)改變分區(qū)


$ cd ..
$ umount /home

  
    這種方法仍然是安全的,這是因為您擁有舊分區(qū)上源文件系統(tǒng)的完整副本。無論在哪一種解決方案中,您都沒有刪除內(nèi)容或源數(shù)據(jù)。
  
  對復(fù)制進行驗證
  
    無論使用 cp 還是 tar,您始終都應(yīng)該驗證復(fù)制過程是否成功完成。盡管 tar 對所復(fù)制的文件進行了證實(使用 v 選項),但是您應(yīng)該確保在新的文件系統(tǒng)中正確地創(chuàng)建了這些文件。
  
    首先,檢查 du 對舊的和新的系統(tǒng)的輸出(請參見清單 13)。
  
  
  清單 13. 檢查 du 的輸出


$ du -sk /usr
3923068 /usr
$ du -sk /mnt/usr.tmp
3923068 /mnt/usr.tmp

  
    這兩個數(shù)字應(yīng)該是相等的,然而,根據(jù)新文件系統(tǒng)的類型以及舊文件系統(tǒng)/目錄和新文件系統(tǒng)/目錄中對應(yīng)的文件和目錄的分配大小的不同,您可能會發(fā)現(xiàn)它們在大小上有些細(xì)微的差異。
  
    另一種好的測試方法是,比較源和目標(biāo)文件/目錄的數(shù)目。您可以使用簡單的 find command 來完成這項工作,如清單 14 所示。
  
  
  清單 14. 比較源和目標(biāo)文件/目錄的數(shù)目


$ find /usr |wc -l
347001
$ find /mnt/usr.tmp |wc -l
347001

  
    如果您將文件從一個文件系統(tǒng)復(fù)制到另一個文件系統(tǒng),那么還有一種好的測試方法,即比較索引節(jié)點數(shù)目,這將顯示分配了多少個索引節(jié)點。如果您將文件從一個文件系統(tǒng)復(fù)制到另一個與其類型完全相同的文件系統(tǒng),那么所使用的索引節(jié)點的數(shù)目應(yīng)該是相等的??梢允褂脦?-i 命令行選項的 df 命令獲取索引節(jié)點的統(tǒng)計信息,或者在傳統(tǒng)的 UNIX 系統(tǒng)中,不帶參數(shù)的 df 可以輸出創(chuàng)建“文件”的數(shù)目。
  
    清單 15 中的示例來自于 Linux 系統(tǒng)。
  
  
  清單 15. 比較索引節(jié)點數(shù)目


$ df -i /usr
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 977280 411959 565321 43% /

  清單 16 中的示例來自 Solaris。
  
  
  清單 16. 在 Solaris 中比較索引節(jié)點數(shù)目


$  /bin/df /usr
/usr (/dev/dsk/c0t0d0s3 ): 9076010 blocks 863695 files

  
  更新系統(tǒng)以反映新的組織結(jié)構(gòu)
  
    此時,您應(yīng)該已經(jīng)擁有了一個新的文件系統(tǒng),其中包含了要移動到這個新文件系統(tǒng)的文件系統(tǒng)或目錄的副本。現(xiàn)在,您應(yīng)該對系統(tǒng)文件(特別是文件系統(tǒng)裝入信息)進行更新,以反映新的結(jié)構(gòu)。該信息存儲在 /etc/fstab、/etc/vfstab 中,或通過特定的管理工具來訪問,如 HP-UX 上的 SAM。
  
    如果您需要對現(xiàn)有文件系統(tǒng)中的目錄進行遷移,可以執(zhí)行下面的操作:
  
     對原始目錄進行重命名。
     創(chuàng)建新的目錄。
     使用 chown 和 chmod 設(shè)置新目錄的所有權(quán)和權(quán)限。
     理想情況下,您應(yīng)該重新啟動系統(tǒng)以確保使用新的布局。如果您將文件系統(tǒng)從一個設(shè)備遷移到另一個設(shè)備,那么必須重新啟動。通常,您可以卸載現(xiàn)有的文件系統(tǒng),特別是當(dāng)它為系統(tǒng)目錄(換句話說,/var 或 /usr 下的系統(tǒng)目錄)時。
  
    如果無法進行重新啟動,可以手動地將新的系統(tǒng)裝入到新的裝入點,然后盡可能早地進行重新啟動。
  
    在重新啟動并證實一切正常工作之后,可以刪除舊的目錄或重用舊的分區(qū)。
  
  結(jié)束語
  
    在許多情況下,需要對活動或非活動的 UNIX 文件系統(tǒng)進行復(fù)制??赡苁且驗楹谋M了磁盤空間,所以文件系統(tǒng)需要更大的分區(qū)來安裝軟件,甚至是因為硬件將會出現(xiàn)故障。在這些情況下,您需要使用本文中介紹的技巧,將現(xiàn)有的文件復(fù)制到新的文件系統(tǒng)。
  
    這種復(fù)制操作本身存在一定的陷井,即對活動的文件系統(tǒng)進行復(fù)制可能是有風(fēng)險的,特別是在打開了多個文件的情況下。您還應(yīng)該注意,務(wù)必避免用要復(fù)制的文件意外地覆蓋分區(qū)或現(xiàn)有的文件。然而正如您所看到的,經(jīng)過周密的考慮,可以高效地、可靠地對文件進行遷移,以充分利用更大的空間,即使是在活動的系統(tǒng)中也可以實現(xiàn)。
  
  

分享到

多易

相關(guān)推薦