Linux系統中創建大文件,並作為文件系統使用

来源:https://www.cnblogs.com/Clonglegs/archive/2019/07/15/11189714.html
-Advertisement-
Play Games

在LInux系統的使用過程中,有時候會遇到諸如某個磁碟分區的大小不夠用了,導致其下的文件系統不能正常寫入數據。亦或者是系統swap分區太小,不夠用或者不滿足條件而導致的其他一系列問題。如果我們系統上掛載的有富餘的磁碟空間,這樣就簡單多了,直接在現成的磁碟上划出一個分區,格式化並掛載就完事了。但是也有 ...


  在LInux系統的使用過程中,有時候會遇到諸如某個磁碟分區的大小不夠用了,導致其下的文件系統不能正常寫入數據。亦或者是系統swap分區太小,不夠用或者不滿足條件而導致的其他一系列問題。如果我們系統上掛載的有富餘的磁碟空間,這樣就簡單多了,直接在現成的磁碟上划出一個分區,格式化並掛載就完事了。但是也有些時候限於條件,沒有富餘的磁碟空間,怎麼辦的呢?我們可以在現有的系統中,看看有沒有其他分區的空間比較大,並且分出去一部分後,仍然不影響改分區系統的正常使用。如果存在這種情況,就可以實現間接的擴展磁碟空間了。

  1,我們需要先在有富餘空間的磁碟分區上創建一個大文件,文件的大小根據你的實際需要和所要划出空間分區實際大小來決定。創建大文件,可以使用如下3個命令:

    1.1 dd

      創建大文件首選的會是dd命令,dd是 device driver 的縮寫,可以用來讀取設備、文件中的內容,並原封不動地複製到指定位置。因此dd本質上是copy一個文件副本,

    它強制你編寫每個數據塊,並初始化文件內容,但是初始化會占用大量的I / O時間,因此使用dd命令創建大文件的速度是比較緩慢的。使用dd創建大文件的命令如下:

      dd if=/dev/zero of=/home/disk0 bs=2G count=1

    這個命令將在/home根目錄下創建一個名為disk0的空文件,其中用到瞭如下四個選項:

      if=文件名:指定輸入文件名或者設備名,如果省略“if=文件名”,則表示從標準輸入讀取。

      of=文件名:指定輸出文件名或者設備名,如果省略“of=文件名”,則表示寫到標準輸出。

      bs:指定單個文件的塊block大小。

      count:想要創建文件的個數。

    1.2 fallocate

      fallocate的功能是為文件預分配物理空間,而不是生成一個空洞文件,fallocate分配的空間在磁碟的扇區上是連續的,它減少後續寫入和讀取文件時的磁碟尋道開銷;

    並且是迅速直接占用空間,而不是想空洞文件那樣“假裝”戰=占有那麼多空間,這樣就可以保證隨著磁碟空間的使用,而不會出現該段磁碟空間不足。由於fallocate

    並不是標準的posix介面,並不是所有的文件系統都是支持的,目前主流的ext4和xfs都是可以的。

      fallocate -l 20G /home/disk00

      -l:--length,指定分配文件的長度,即文件的大小;

      disk00:所分配文件名稱

    1.3 truncate

      truncate和lseek是將文件的末尾位置“擴展到”一個固定位置而生成的一個空洞文件,也即是稀疏文件。該文件並不占用實際磁碟空間,只是邏輯上看起來那麼大而已。

    使用ls -l命令可以查看其邏輯大小,即你希望分配的大小。使用du命令可以看到其實際占用的磁碟空間大小。使用od -c命令可以看到文件中間是用“\0”填充的。

      truncate -s 10G /home/disk000

      -s:指定文件的大小

  2,將第一步中得到的大文件進行格式化並掛載到文件系統

    由上述可知,如果所要分配的文件大小不大,比如2G以下,我們可以優選dd命令,當文件大小非常大時,就可以使用fallocate了,由於truncate命令生成的文件並不是看起

  來那麼大,如果非必要,我們還是儘量不選它。

    比如我們使用dd或者fallocate創建一個1G大小的文件:
    dd -if=/dev/zero of=/home/disk00 bs=1024 count=1000000

    fallocate -l 1G /home/disk00

    2.1 擴展一般的文件系統空間

      2.1.1 格式化

      以格式化為ext4文件系統為例

      mkfs.ext4 /home/disk00       ----執行該命令後,系統會提示“disk00 is not a block special device”,直接輸入“y”確認繼續就行。

      2.1.2 掛載到文件系統

      由於disk00並不是一個block device,所以掛載到文件系統時並不能像普通磁碟分區、格式化後那樣直接掛在,我們需要用到loop偽設備。在執行loop掛載前,我們需要

    確認系統中有哪些loopback設備,並且那些是已經被使用的。

      確認系統中有那些loopback設備:

        ls -l /dev/loop*

      確認那些loopback是已經被使用的:

        cat /proc/mount

      確認上述兩個事項後,就可以執行如下掛在命令:

        mount -o loop=/dev/loop0 /home/disk00 /opt/backup_DB

        -o loop=:使用 loop 模式用來將一個檔案當成硬碟分割掛上系統

      2.1.3 將掛載關係寫入/etc/fstab,防止系統重啟後掛載關係丟失。

        echo "/home/disk00 /opt/backup_DB ext4 defaults,loop 0 0" >> /etc/fstab

    2.2 掛載交換分區

      2.2.1 格式化,將其變成一個swap文件

        mkswap /home/disk00

      2.2.2 啟用這個swap文件

        swapon /home/disk00

      2.2.3 寫入/etc/fstab,在系統重啟時能夠自動掛載

        echo "/home/disk00 swap swap defaults 0 0" >> /etc/fstab

  3,操作實例

    下麵以我一個項目中的實際操作為例進行說明:

    我們的MySQL資料庫安裝在/home分區下,該分區大小為3.5T,由於我們沒有外掛磁陣,也沒有獨立的備份伺服器,所以只能將資料庫的備份存放在本地,遵循備份和原始

  數據不能放在同一分區,我們把備份放在了/opt分區,該分區大小為50G。我們庫目前大小為12G,每天產生的數據量為350-400M之間,每兩周數據總量大致增加1G。備份策

  略是每周一全備,然後周二到周日都是基於周一的全備進行增量(這樣的目的是恢復時方便)。備份的保留策略是全備保留3周,之前的全備進行刪除;每周的增量在下一周一

  全備前打包壓縮轉移到/home/old_DB_backup下。由於數據量不斷增多,大概到每周的周六時/opt的占用量就已經達到接近90%了,所以我們考慮將/opt下暫時存放增量備份的

  目錄進行單獨掛載一個分區進行擴容,減輕/opt分區的空間壓力,方案操作如下:

    3.1 由於/home分區的目錄非常大,所以選取/home分區做為分割對象。考慮到後續數據量增加,給予30G空間擴展:

      fallocate -l 30G /home/old_DB_backup/backup_disk/disk0_in

    3.2 我們的文件系統為ext4,所以將改數據文件格式化為ext4

      mkfs.ext4 /home/old_DB_backup/backup_disk/disk0_in

    3.3 掛載到待增加獨立空間的增量備份目錄

      mount -o loop=/dev/loop0 /home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup

    3.4 掛載關係寫入/etc/fstab

      echo "/home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup ext4 defaults,loop, 0 0" >> /etc/fstab


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [TOC] 官方網站 http://jumpserver.org Jumpserver 軟體包環境要求: Python = 3.6.x Mysql Server ≥ 5.6 Mariadb Server ≥ 5.5.56 Redis 生產環境部署建議部署 1.4.8 版本 環境 jumpserver ...
  • 使用apt-get的時候發現ubuntu和阿裡雲均已經不提供該版本的源,所以需要找到其他的替代源。 使用的ubuntu版本是14.10,屬於非LTS(長期支持版本),因此前一段時間還可以使用apt-get update來更新源,現在已提示更新失敗,無法下載,無法訪問了。現提供一種解決思路供大家參考。 ...
  • 文章引用自:Git使用教程 https://www.cnblogs.com/tugenhua0707/p/4050072.html 本文章只限用於Windows,敬請參考 註意:操作命令純屬手敲,可能會有錯誤,錯誤後參考文章鏈接! Git下載地址:https://gitforwindows.org/ ...
  • 今天公司VPN掉線後,訪問項目出錯502。 百度了說是nginx代理錯誤,但入職不久不知道咋搞。。。 於是乎就想重啟一下Java應用。 1.找到Java應用的進程 jps 命令 和 ps -ef|grep java 2.結束進程id kill -9 id 3.加上上篇文章寫的monitor.sh監測 ...
  • [TOC] 前言 在自己做linux的相關服務實驗時,是沒有那麼多伺服器/主機來進行相關操作的,所以多是選VMware workstations這款軟體來進行虛擬化模擬操作 為了節省更多的時間用來做實際的操作配置,所以建議配置一個模板機,而後以克隆的方式更加快速便捷的創建實驗環境 網路優化 在虛擬軟 ...
  • 以Ubuntu為例,利用系統自帶計劃任務,即cron ,計劃任務,是任務在約定的時間執行已經計劃好的工作,這是錶面的意思。在Linux中,我們經常用到 cron 伺服器來完成這項工作。cron伺服器可以根據配置文件約定的時間來執行特定的任務。(詳細使用方法請參考:https://baike.baid ...
  • 參考原文 https://www.cnblogs.com/tianqiang/p/9251486.html [存儲種類] 數據類型 [存儲器類型] 變數名 [_at_] [地址]; _at_ 地址定位 關鍵詞用於在定義變數時指定變數所在地址 alien 函數特性聲明 用以申明與PL/M51相容函數 ...
  • Linux軟體安裝——軟體包 摘要:本文主要學習了Linux下軟體安裝的相關知識。 軟體包 簡介 Linux下的軟體包眾多,且幾乎都是經GPL授權、免費開源(無償公開源代碼)的。這意味著如果你具備修改軟體源代碼的能力,只要你願意,可以隨意修改。 GPL,全稱General Public Licens ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...