關(guān)于本系列
通常,UNIX® 管理員都擁有一套常用的輔助進(jìn)程管理的實(shí)用工具、訣竅和系統(tǒng)。本文提供了各種用于簡化各個(gè)過程的關(guān)鍵實(shí)用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統(tǒng),而大部分的訣竅則來源于長期的經(jīng)驗(yàn)積累和減輕系統(tǒng)管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環(huán)境中可用的工具,包括簡化異類環(huán)境中的管理任務(wù)的方法。
移動(dòng) UNIX 目錄或文件系統(tǒng)
在許多情況下,您可能需要將 UNIX 文件系統(tǒng)從一個(gè)設(shè)備或硬盤分區(qū)移動(dòng)到另一個(gè)設(shè)備或硬盤分區(qū),或者需要移動(dòng)文件系統(tǒng)中的內(nèi)容以釋放所占用的空間,在處理這些情況的過程中,都需要?jiǎng)?chuàng)建新的文件系統(tǒng)。可能是因?yàn)樵O(shè)備將會(huì)出現(xiàn)故障,或者僅僅只是耗盡了空間。您可以在運(yùn)行于單用戶模式的系統(tǒng)或者活動(dòng)的 和運(yùn)行的系統(tǒng)(需要確保文件在移動(dòng)的過程中仍然可用)中完成這項(xiàng)任務(wù)。
在后面的這種情況下,即對活動(dòng)的文件系統(tǒng)進(jìn)行遷移時(shí),您可能需要在某個(gè)應(yīng)用程序運(yùn)行的過程中對其進(jìn)行移動(dòng)。對于上面的這兩種情況,您可能需要移動(dòng)與系統(tǒng)相關(guān)的文件系統(tǒng)(如 /usr 或 /var),無論是否運(yùn)行于單用戶模式,該文件系統(tǒng)都有可能正在被使用。
在任何文件系統(tǒng)的移動(dòng)操作中,您必須確保正確地將數(shù)據(jù)復(fù)制到新的目標(biāo)。作為一個(gè)典型的示例,假定您的系統(tǒng)的文件/磁盤布局和使用情況如清單 1 所示。
清單 1. 示例文件/磁盤布局和使用情況
|
正如您在清單 1 中所看到的,根文件系統(tǒng)已使用了百分之八十四,您可能應(yīng)該將處于單個(gè)分區(qū)的根文件系統(tǒng)中的目錄移動(dòng)到新的分區(qū)或設(shè)備,以確保根文件系統(tǒng)不會(huì)被占滿。
最好是移動(dòng)顯著影響希望釋放空間的文件系統(tǒng)中的具有特定用途的單個(gè)目錄。例如,在這個(gè)示例中,您可能希望將 /var 或 /usr 目錄移動(dòng)到它自己的文件系統(tǒng)。移動(dòng)多個(gè)更小的目錄,效率會(huì)比較低。您所需要做的只是輕松地移動(dòng)單個(gè)目錄以釋放所占用的空間。
在有些情況下,您可能需要將現(xiàn)有的分區(qū)移動(dòng)或復(fù)制到一個(gè)新的位置(例如,在設(shè)備可能出現(xiàn)故障的情況下)。這里,已經(jīng)解釋了究竟是應(yīng)該選擇目錄還是現(xiàn)有的文件系統(tǒng)。
在本文中,假設(shè)您已經(jīng)添加了一個(gè)新的硬盤設(shè)備或具有備用的硬盤設(shè)備或分區(qū),以用作目錄或文件系統(tǒng)的移動(dòng)目標(biāo)。
移動(dòng)數(shù)據(jù)的快速指導(dǎo)
移動(dòng)文件系統(tǒng)或?qū)F(xiàn)有的目錄移動(dòng)到新的文件系統(tǒng),基本操作序列如下:
選擇要進(jìn)行復(fù)制的數(shù)據(jù)。
創(chuàng)建一個(gè)新的分區(qū)。
在該分區(qū)上創(chuàng)建一個(gè)新的文件系統(tǒng)。
將該分區(qū)裝入到一個(gè)臨時(shí)目錄。
將數(shù)據(jù)復(fù)制到這個(gè)臨時(shí)目錄。
對原始目錄進(jìn)行重命名。
創(chuàng)建新的裝入點(diǎn)。
裝入這個(gè)文件系統(tǒng)。
理想情況下,在完成這些操作之后,您應(yīng)該重新啟動(dòng)計(jì)算機(jī),盡管這并不總是必需的或可能的,但是應(yīng)該在允許的情況下盡早重新啟動(dòng)計(jì)算機(jī)。
讓我們對序列中的每個(gè)步驟進(jìn)行更仔細(xì)的研究。
創(chuàng)建新的分區(qū)和文件系統(tǒng)
在創(chuàng)建新的分區(qū)和文件系統(tǒng)之前,首先確??捎么笮『涂臻g與要移動(dòng)到新的文件系統(tǒng)中的文件/目錄的大小相匹配。要完成這項(xiàng)工作,最簡單的方法是使用 du 工具來確定當(dāng)前文件/目錄的大小。例如,如果您打算對示例系統(tǒng)中的 /usr 目錄進(jìn)行移動(dòng),可以使用如清單 2 所示的命令。
清單 2. 移動(dòng)示例系統(tǒng)中的 /usr 目錄
|
-s 選項(xiàng)確保生成整個(gè)目錄的摘要信息,而不是所有內(nèi)容的信息,并且 -k 選項(xiàng)確保以 KB 為單位顯示目錄大小。從上面的輸出結(jié)果中您可以確定,需要至少 4GB 大小的新的分區(qū)。
如果您將現(xiàn)有的文件系統(tǒng)(而不是現(xiàn)有的文件系統(tǒng)中的單個(gè)目錄)移動(dòng)到一個(gè)更大的分區(qū),那么可以使用 df 的輸出來確定當(dāng)前文件系統(tǒng)的大小。
在知道了其大小之后,理想情況下,您應(yīng)該創(chuàng)建一個(gè)比所需大小大百分之二十五的新的分區(qū),并且至少要大百分之十。對于上面的示例文件系統(tǒng),您至少需要?jiǎng)?chuàng)建一個(gè) 5GB 大小的新的分區(qū)。
要?jiǎng)?chuàng)建新的分區(qū)和文件系統(tǒng),需要使用適合于您的操作系統(tǒng)的工具。例如:
在 Linux® 中,您需要使用 fdisk 對物理硬盤上的各個(gè)分區(qū)進(jìn)行配置,并使用 mke2fs 或 mkfs.* 創(chuàng)建命令中的一個(gè),以便在新的分區(qū)上創(chuàng)建合適的文件系統(tǒng)。
在 Solaris SPARC 系統(tǒng)中,可以使用 format 來創(chuàng)建并配置分區(qū)。在 Solaris x86 系統(tǒng)中,在使用 format 對 Sun 分區(qū)表進(jìn)行配置之前,您可能還需要使用 fdisk 來配置磁盤分區(qū)。然后,您可以使用 newfs(或某個(gè)文件系統(tǒng)特定的命令)來創(chuàng)建文件系統(tǒng)。
在 AIX® 中,可以使用 mkvg、chpv 或某個(gè)其他的卷管理工具為新的分區(qū)創(chuàng)建合適的分區(qū)或卷組。然后,可以使用 crfs 創(chuàng)建文件系統(tǒng)。
創(chuàng)建了文件系統(tǒng)之后,在對數(shù)據(jù)進(jìn)行復(fù)制時(shí),需要在進(jìn)行載入的新文件系統(tǒng)中創(chuàng)建一個(gè)新的目錄。例如,我個(gè)人喜歡在相似的位置創(chuàng)建新的文件系統(tǒng),并且通過名稱將其標(biāo)識為臨時(shí)文件系統(tǒng)。
對于上面的 /usr 示例,我將創(chuàng)建一個(gè)新的目錄 /mnt/usr.tmp,并將新的文件系統(tǒng)載入到該目錄。
復(fù)制信息
事實(shí)上,復(fù)制信息可能是整個(gè)過程中最簡單的部分,但是選擇合適的工具將直接影響到信息傳輸?shù)挠行院托?。然而,您?yīng)該確保將文件復(fù)制到正確的位置,要避免覆蓋現(xiàn)有的數(shù)據(jù)。
有許多種不同的方法可以完成這個(gè)任務(wù),但是主要的兩種解決方案是使用基本的 cp 工具或 tar 工具。前者是一種非??焖俚姆椒ǎ窃谀承┎僮飨到y(tǒng)中,對于一些非標(biāo)準(zhǔn)的文件,如管道和設(shè)備,可能會(huì)出現(xiàn)問題。tar 工具可能是一種速度較慢的替代方法,但是在傳輸其他類型的文件時(shí),它更加可靠并且提供了關(guān)于復(fù)制過程的更加可視化的反饋信息。
無論您使用哪一種方法,都應(yīng)該確保不要對源文件系統(tǒng)中的任何文件進(jìn)行更新。請記住,您所建立的任何副本僅包含在進(jìn)行復(fù)制操作時(shí)對應(yīng)的文件中所包含的數(shù)據(jù)。如果在進(jìn)行復(fù)制的過程中對該文件系統(tǒng)中的文件進(jìn)行了更新,那么新的文件系統(tǒng)中的文件可能是不完整的并且受到了損壞。
使用 cp
cp 工具提供了一個(gè)遞歸復(fù)制選項(xiàng) (-r),使用該選項(xiàng)可以將所有的文件、目錄以及這些目錄中的文件全部復(fù)制到目標(biāo)。您還可以使用 -p 選項(xiàng)來保持所有權(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)目錄
|
將文件從舊的目錄復(fù)制到當(dāng)前(新的)目錄,如清單 4 所示。
清單 4. 將文件復(fù)制到新的目錄
|
您應(yīng)該進(jìn)行快速的驗(yàn)證以確保成功地復(fù)制了這些文件。簡單的 ls 即可以得到清楚的指示(請參見清單 5)。稍后您將了解到更詳細(xì)的檢查方法。
清單 5. 驗(yàn)證成功地復(fù)制了這些文件
|
如果您發(fā)現(xiàn)沒有正確地復(fù)制某些文件或者符號鏈接和其他特殊類型的文件,那么您可能需要嘗試使用 tar。
使用 tar
與 cp 相比,tar 工具提供了許多的好處。首先,也是最重要的,對于非標(biāo)準(zhǔn)的文件類型,它通常更加可靠。其次,因?yàn)樗軌蛱峁╆P(guān)于復(fù)制的文件的可視化反饋信息,所以使用它將文件復(fù)制到新的系統(tǒng)會(huì)更加方便。最后一點(diǎn)也非常重要,您可以使用 tar 創(chuàng)建文件系統(tǒng)的存檔文件,萬一在出現(xiàn)問題時(shí),該文件可以作為源目錄/文件系統(tǒng)的備份。在處于單用戶模式的計(jì)算機(jī)的用戶文件系統(tǒng)中,這種 tar 文件方法可以用來創(chuàng)建新的文件系統(tǒng)內(nèi)容,而無需將新的目標(biāo)裝入到臨時(shí)目錄裝入點(diǎn)。
使用 tar 進(jìn)行文件復(fù)制的最好的方法是,通過管道將 tar 創(chuàng)建的文件傳遞到位于新的位置進(jìn)行文件提取的另一個(gè) tar。清單 6 中給出了一個(gè)這樣的示例。
清單 6. 使用 tar 進(jìn)行文件復(fù)制
|
第一個(gè) tar 中的 c 參數(shù)告訴 tar 創(chuàng)建一個(gè)存檔。v、f 和 p 選項(xiàng)分別指定輸出詳細(xì)信息(顯示正在添加或提取的文件)、對文件(而不是磁帶設(shè)備)進(jìn)行寫入/讀取、保持權(quán)限和所有權(quán)。
清單 6 中的命令行能夠正常工作,這是因?yàn)樵诠艿赖暮蟀氩糠种?,在從?biāo)準(zhǔn)輸入讀取管道的前半部分中創(chuàng)建的 .tar 文件之前,首先改變到了目標(biāo)目錄。
如果您需要?jiǎng)?chuàng)建一個(gè) .tar 文件并使用這種方法,而不是執(zhí)行直接的復(fù)制,那么您必須擁有一個(gè)能夠容納源目錄中所有文件的文件系統(tǒng)。清單 7 介紹了進(jìn)行復(fù)制的過程。
清單 7. 進(jìn)行復(fù)制的過程
|
無論使用哪一種解決方案,您將在每個(gè)文件復(fù)制到/復(fù)制出存檔文件時(shí)獲得相應(yīng)的報(bào)告,假設(shè)您使用了 v 命令行選項(xiàng)(請參見清單 8)。
清單 8. 打印出復(fù)制過程
|
使用 tar 和直接文件系統(tǒng)交換
要將文件系統(tǒng)的內(nèi)容復(fù)制到新的位置,而無需創(chuàng)建臨時(shí)裝入點(diǎn),您必須首先擁有足夠容納源目錄中所有文件的空間。
如果使用新的文件系統(tǒng)來替代一個(gè)目錄,可以執(zhí)行以下操作:
和前面一樣,創(chuàng)建新的分區(qū)和文件系統(tǒng)。
創(chuàng)建源目錄的 .tar 文件(請參見清單 9)。
清單 9. 創(chuàng)建 .tar 文件
|
|
|
|
|
|
|
|