關于本系列
通常,UNIX® 管理員都擁有一套常用的輔助進程管理的實用工具、訣竅和系統。本文提供了各種用于簡化各個過程的關鍵實用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統,而大部分的訣竅則來源于長期的經驗積累和減輕系統管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異類環境中的管理任務的方法。
移動 UNIX 目錄或文件系統
在許多情況下,您可能需要將 UNIX 文件系統從一個設備或硬盤分區移動到另一個設備或硬盤分區,或者需要移動文件系統中的內容以釋放所占用的空間,在處理這些情況的過程中,都需要創建新的文件系統??赡苁且驗樵O備將會出現故障,或者僅僅只是耗盡了空間。您可以在運行于單用戶模式的系統或者活動的 和運行的系統(需要確保文件在移動的過程中仍然可用)中完成這項任務。
在后面的這種情況下,即對活動的文件系統進行遷移時,您可能需要在某個應用程序運行的過程中對其進行移動。對于上面的這兩種情況,您可能需要移動與系統相關的文件系統(如 /usr 或 /var),無論是否運行于單用戶模式,該文件系統都有可能正在被使用。
在任何文件系統的移動操作中,您必須確保正確地將數據復制到新的目標。作為一個典型的示例,假定您的系統的文件/磁盤布局和使用情況如清單 1 所示。
|
正如您在清單 1 中所看到的,根文件系統已使用了百分之八十四,您可能應該將處于單個分區的根文件系統中的目錄移動到新的分區或設備,以確保根文件系統不會被占滿。
最好是移動顯著影響希望釋放空間的文件系統中的具有特定用途的單個目錄。例如,在這個示例中,您可能希望將 /var 或 /usr 目錄移動到它自己的文件系統。移動多個更小的目錄,效率會比較低。您所需要做的只是輕松地移動單個目錄以釋放所占用的空間。
在有些情況下,您可能需要將現有的分區移動或復制到一個新的位置(例如,在設備可能出現故障的情況下)。這里,已經解釋了究竟是應該選擇目錄還是現有的文件系統。
在本文中,假設您已經添加了一個新的硬盤設備或具有備用的硬盤設備或分區,以用作目錄或文件系統的移動目標。
![]() ![]() |
![]()
|
移動數據的快速指導
移動文件系統或將現有的目錄移動到新的文件系統,基本操作序列如下:
理想情況下,在完成這些操作之后,您應該重新啟動計算機,盡管這并不總是必需的或可能的,但是應該在允許的情況下盡早重新啟動計算機。
讓我們對序列中的每個步驟進行更仔細的研究。
![]() ![]() |
![]()
|
創建新的分區和文件系統
在創建新的分區和文件系統之前,首先確??捎么笮『涂臻g與要移動到新的文件系統中的文件/目錄的大小相匹配。要完成這項工作,最簡單的方法是使用 du 工具來確定當前文件/目錄的大小。例如,如果您打算對示例系統中的 /usr 目錄進行移動,可以使用如清單 2 所示的命令。
|
-s
選項確保生成整個目錄的摘要信息,而不是所有內容的信息,并且 -k
選項確保以 KB 為單位顯示目錄大小。從上面的輸出結果中您可以確定,需要至少 4GB 大小的新的分區。
如果您將現有的文件系統(而不是現有的文件系統中的單個目錄)移動到一個更大的分區,那么可以使用 df 的輸出來確定當前文件系統的大小。
在知道了其大小之后,理想情況下,您應該創建一個比所需大小大百分之二十五的新的分區,并且至少要大百分之十。對于上面的示例文件系統,您至少需要創建一個 5GB 大小的新的分區。
要創建新的分區和文件系統,需要使用適合于您的操作系統的工具。例如:
mke2fs
或 mkfs.*
創建命令中的一個,以便在新的分區上創建合適的文件系統。 newfs
(或某個文件系統特定的命令)來創建文件系統。 創建了文件系統之后,在對數據進行復制時,需要在進行載入的新文件系統中創建一個新的目錄。例如,我個人喜歡在相似的位置創建新的文件系統,并且通過名稱將其標識為臨時文件系統。
對于上面的 /usr 示例,我將創建一個新的目錄 /mnt/usr.tmp,并將新的文件系統載入到該目錄。
![]() ![]() |
![]()
|
復制信息
事實上,復制信息可能是整個過程中最簡單的部分,但是選擇合適的工具將直接影響到信息傳輸的有效性和效率。然而,您應該確保將文件復制到正確的位置,要避免覆蓋現有的數據。
有許多種不同的方法可以完成這個任務,但是主要的兩種解決方案是使用基本的 cp 工具或 tar 工具。前者是一種非??焖俚姆椒?,但是在某些操作系統中,對于一些非標準的文件,如管道和設備,可能會出現問題。tar 工具可能是一種速度較慢的替代方法,但是在傳輸其他類型的文件時,它更加可靠并且提供了關于復制過程的更加可視化的反饋信息。
無論您使用哪一種方法,都應該確保不要對源文件系統中的任何文件進行更新。請記住,您所建立的任何副本僅包含在進行復制操作時對應的文件中所包含的數據。如果在進行復制的過程中對該文件系統中的文件進行了更新,那么新的文件系統中的文件可能是不完整的并且受到了損壞。
![]() ![]() |
![]()
|
使用 cp
cp 工具提供了一個遞歸復制選項 (-r
),使用該選項可以將所有的文件、目錄以及這些目錄中的文件全部復制到目標。您還可以使用 -p
選項來保持所有權和復制的文件的權限。如果您希望確保新的文件系統保留源文件系統的安全細節,那么這是至關重要的。在大多數情況下,這樣做是必須的。
要將文件從現有的目錄復制到新的位置,請執行以下步驟:
|
|
您應該進行快速的驗證以確保成功地復制了這些文件。簡單的 ls
即可以得到清楚的指示(請參見清單 5)。稍后您將了解到更詳細的檢查方法。
|
如果您發現沒有正確地復制某些文件或者符號鏈接和其他特殊類型的文件,那么您可能需要嘗試使用 tar。
![]() ![]() |
![]()
|
使用 tar
與 cp 相比,tar 工具提供了許多的好處。首先,也是最重要的,對于非標準的文件類型,它通常更加可靠。其次,因為它能夠提供關于復制的文件的可視化反饋信息,所以使用它將文件復制到新的系統會更加方便。最后一點也非常重要,您可以使用 tar 創建文件系統的存檔文件,萬一在出現問題時,該文件可以作為源目錄/文件系統的備份。在處于單用戶模式的計算機的用戶文件系統中,這種 tar 文件方法可以用來創建新的文件系統內容,而無需將新的目標裝入到臨時目錄裝入點。
使用 tar 進行文件復制的最好的方法是,通過管道將 tar 創建的文件傳遞到位于新的位置進行文件提取的另一個 tar。清單 6 中給出了一個這樣的示例。
|
第一個 tar 中的 c
參數告訴 tar 創建一個存檔。v
、f
和 p
選項分別指定輸出詳細信息(顯示正在添加或提取的文件)、對文件(而不是磁帶設備)進行寫入/讀取、保持權限和所有權。
清單 6 中的命令行能夠正常工作,這是因為在管道的后半部分中,在從標準輸入讀取管道的前半部分中創建的 .tar 文件之前,首先改變到了目標目錄。
如果您需要創建一個 .tar 文件并使用這種方法,而不是執行直接的復制,那么您必須擁有一個能夠容納源目錄中所有文件的文件系統。清單 7 介紹了進行復制的過程。
|
無論使用哪一種解決方案,您將在每個文件復制到/復制出存檔文件時獲得相應的報告,假設您使用了 v
命令行選項(請參見清單 8)。
|
![]() ![]() |
![]()
|
使用 tar 和直接文件系統交換
要將文件系統的內容復制到新的位置,而無需創建臨時裝入點,您必須首先擁有足夠容納源目錄中所有文件的空間。
如果使用新的文件系統來替代一個目錄,可以執行以下操作:
|
|
|
如果您需要為現有的文件系統改變分區(如清單 10 中所示),那么命令序列是類似的,但是您需要卸載現有的文件系統,而不是對目錄進行重命名(請參見清單 12)。
|
這種方法仍然是安全的,這是因為您擁有舊分區上源文件系統的完整副本。無論在哪一種解決方案中,您都沒有刪除內容或源數據。
![]() ![]() |
![]()
|
對復制進行驗證
無論使用 cp 還是 tar,您始終都應該驗證復制過程是否成功完成。盡管 tar 對所復制的文件進行了證實(使用 v
選項),但是您應該確保在新的文件系統中正確地創建了這些文件。
首先,檢查 du 對舊的和新的系統的輸出(請參見清單 13)。
|
這兩個數字應該是相等的,然而,根據新文件系統的類型以及舊文件系統/目錄和新文件系統/目錄中對應的文件和目錄的分配大小的不同,您可能會發現它們在大小上有些細微的差異。
另一種好的測試方法是,比較源和目標文件/目錄的數目。您可以使用簡單的 find command
來完成這項工作,如清單 14 所示。
|
如果您將文件從一個文件系統復制到另一個文件系統,那么還有一種好的測試方法,即比較索引節點數目,這將顯示分配了多少個索引節點。如果您將文件從一個文件系統復制到另一個與其類型完全相同的文件系統,那么所使用的索引節點的數目應該是相等的??梢允褂脦?-i
命令行選項的 df 命令獲取索引節點的統計信息,或者在傳統的 UNIX 系統中,不帶參數的 df 可以輸出創建“文件”的數目。
清單 15 中的示例來自于 Linux 系統。
|
清單 16 中的示例來自 Solaris。
|
![]() ![]() |
![]()
|
更新系統以反映新的組織結構
此時,您應該已經擁有了一個新的文件系統,其中包含了要移動到這個新文件系統的文件系統或目錄的副本?,F在,您應該對系統文件(特別是文件系統裝入信息)進行更新,以反映新的結構。該信息存儲在 /etc/fstab、/etc/vfstab 中,或通過特定的管理工具來訪問,如 HP-UX 上的 SAM。
如果您需要對現有文件系統中的目錄進行遷移,可以執行下面的操作:
理想情況下,您應該重新啟動系統以確保使用新的布局。如果您將文件系統從一個設備遷移到另一個設備,那么必須重新啟動。通常,您可以卸載現有的文件系統,特別是當它為系統目錄(換句話說,/var 或 /usr 下的系統目錄)時。
如果無法進行重新啟動,可以手動地將新的系統裝入到新的裝入點,然后盡可能早地進行重新啟動。
在重新啟動并證實一切正常工作之后,可以刪除舊的目錄或重用舊的分區。
![]() ![]() |
![]()
|
結束語
在許多情況下,需要對活動或非活動的 UNIX 文件系統進行復制??赡苁且驗楹谋M了磁盤空間,所以文件系統需要更大的分區來安裝軟件,甚至是因為硬件將會出現故障。在這些情況下,您需要使用本文中介紹的技巧,將現有的文件復制到新的文件系統。
這種復制操作本身存在一定的陷井,即對活動的文件系統進行復制可能是有風險的,特別是在打開了多個文件的情況下。您還應該注意,務必避免用要復制的文件意外地覆蓋分區或現有的文件。然而正如您所看到的,經過周密的考慮,可以高效地、可靠地對文件進行遷移,以充分利用更大的空間,即使是在活動的系統中也可以實現。
原文轉自:http://www.anti-gravitydesign.com