當前位置:首頁 » 操作系統 » linuxlzo

linuxlzo

發布時間: 2023-01-06 23:55:47

Ⅰ openwrt中的squashfs是基於ram還是flash的文件系統

SquashFS[1]是一套基於linux內核使用的壓縮只讀文件系統。該文件系統能夠壓縮系統內的文檔,inode以及目錄,文件最大支持2^64位元組。
SquashFS是基於GPL協議的開源軟體。初始的版本使用gzip壓縮,2.6.34版本Linux內核增加了支持LZMA和LZO壓縮,並且在2.6.38內核版本上增加支持XZ壓縮。

Ⅱ Linux怎麼設置系統環境變數之export命令詳解

1. Linux export命令簡介

Linux export命令用於設置或顯示環境變數。

在shell中執行程序時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程序使用。export的效力僅及於該次登陸操作。

export命令用於將shell變數輸出為環境變數,或者將shell函數輸出為環境變數。

一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執 行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本。

Linux export命令簡介

2. export參數

-f 代表[變數名稱]中為函數名稱。

-n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。

-p 列出所有的shell賦予程序的環境變數。

一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本。

Linux怎麼設置變數環境

3. 在linux里設置環境變數的方法

一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設置環境變數。例如我的mips-linux-gcc編譯器在「/opt/abc/123/bin」目錄下,有如下三種方法來設置環境變數:

3.1 直接用export命令,臨時生效

查看是否已經設好,可用命令export查看:

檢查:

輸出結果:

declare -x HISTCONTROL="ignoreps"

declare -x HISTSIZE="1000"

declare -x HOME="/root"

declare -x HOSTNAME="zcwyou"

declare -x LANG="en_US.UTF-8"

declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"

declare -x LOGNAME="root"

declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32: .tar=01;31: .tgz=01;31: .arc=01;31: .arj=01;31: .taz=01;31: .lha=01;31: .lz4=01;31: .lzh=01;31: .lzma=01;31: .tlz=01;31: .txz=01;31: .tzo=01;31: .t7z=01;31: .zip=01;31: .z=01;31: .Z=01;31: .dz=01;31: .gz=01;31: .lrz=01;31: .lz=01;31: .lzo=01;31: .xz=01;31: .bz2=01;31: .bz=01;31: .tbz=01;31: .tbz2=01;31: .tz=01;31: .deb=01;31: .rpm=01;31: .jar=01;31: .war=01;31: .ear=01;31: .sar=01;31: .rar=01;31: .alz=01;31: .ace=01;31: .zoo=01;31: .cpio=01;31: .7z=01;31: .rz=01;31: .cab=01;31: .jpg=01;35: .jpeg=01;35: .gif=01;35: .bmp=01;35: .pbm=01;35: .pgm=01;35: .ppm=01;35: .tga=01;35: .xbm=01;35: .xpm=01;35: .tif=01;35: .tiff=01;35: .png=01;35: .svg=01;35: .svgz=01;35: .mng=01;35: .pcx=01;35: .mov=01;35: .mpg=01;35: .mpeg=01;35: .m2v=01;35: .mkv=01;35: .webm=01;35: .ogm=01;35: .mp4=01;35: .m4v=01;35: .mp4v=01;35: .vob=01;35: .qt=01;35: .nuv=01;35: .wmv=01;35: .asf=01;35: .rm=01;35: .rmvb=01;35: .flc=01;35: .avi=01;35: .fli=01;35: .flv=01;35: .gl=01;35: .dl=01;35: .xcf=01;35: .xwd=01;35: .yuv=01;35: .cgm=01;35: .emf=01;35: .axv=01;35: .anx=01;35: .ogv=01;35: .ogx=01;35: .aac=01;36: .au=01;36: .flac=01;36: .mid=01;36: .midi=01;36: .mka=01;36: .mp3=01;36: .mpc=01;36: .ogg=01;36: .ra=01;36: .wav=01;36: .axa=01;36: .oga=01;36: .spx=01;36:*.xspf=01;36:"

declare -x MAIL="/var/spool/mail/root"

declare -x OLDPWD

declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"

declare -x PWD="/root"

declare -x SELINUX_LEVEL_REQUESTED=""

declare -x SELINUX_ROLE_REQUESTED=""

declare -x SELINUX_USE_CURRENT_RANGE=""

declare -x SHELL="/bin/bash"

declare -x SHLVL="1"

declare -x SSH_CLIENT="113.105.164.145 6668 22"

declare -x SSH_CONNECTION="113.105.164.145 6668 113.105.164.151 22"

declare -x SSH_TTY="/dev/pts/0"

declare -x TERM="xterm"

declare -x USER="root"

declare -x XDG_RUNTIME_DIR="/run/user/0"

declare -x XDG_SESSION_ID="2185"

留意一下輸出的這部分:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"

可以看到已經包括了剛剛設置的變數路徑。

變數路徑和環境Linux

3.2 修改profile文件,永久生效

把目錄/opt/abc/123/bin在裡面加入:

export PATH="

3.3 修改.bashrc文件,永久生效

在裡面加入:

export PATH="PATH:/opt/abc/123/bin"¨K14K¨G3G在裡面加入:exportPATH="PATH:/opt/abc/123/bin"

檢查結果:

3.4 修改/etc/re.local文件,永久生效

在裡面加入:

export PATH="

「/bin」、「/sbin」、「 /usr/bin」、「/usr/sbin」、「/usr/local/bin」等路徑已經在系統環境變數中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟體可執行文件的文件名和參數(如果需要參數),回車即可。

如果不在標准位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個「一勞永逸」的辦法是把這個路徑加入環境變數。命令 export PATH:/opt/abc/123/bin"「/bin」、「/sbin」、「/usr/bin」、「/usr/sbin」、「/usr/local/bin」等路徑已經在系統環境變數中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟體可執行文件的文件名和參數(如果需要參數),回車即可。如果不在標准位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個「一勞永逸」的辦法是把這個路徑加入環境變數。命令exportPATH="路徑」(或「PATH=

PATH為環境變數名,如DVSDK;調用時用

export DVSDK)可以把這個路徑加入環境變數,但是退出這個命令行就失效了。要想永久生效,需要把這行添加到環境變數文件里。有兩個文件可選:「/etc/profile」和用戶主目錄下的「.bashp​rofile」,「/etc/profile」對系統里所有用戶都有效,用戶主目錄下的「.bashp​rofile」只對這個用戶有效。exportPATH="

PATH:路徑1:路徑2:…:路徑n"),意思是可執行文件的路徑包括原先設定的路徑,也包括從「路徑1」到「路徑n」的所有路徑。當用戶輸入一個一串字元並按回車後,shell會依次在這些路徑里找對應的可執行文件並交給系統核心執行。那個「

」。

注意,與DOS/Window不同,UNIX類系統環境變數中路徑名用冒號分隔,不是分號。另外,軟體越裝越多,環境變數越添越多,為了避免造成混亂,建議所有語句都添加在文件結尾,按軟體的安裝順序添加。

本文已同步至博客站:

https://www.linuxrumen.com/cyml/859.html

Ⅲ 如何自己開發一套伺服器管理系統

轉載 表面上看,是一套基於B/S方式實現的分布式管理系統,但其實背後的架構是基於C/S完成的。你以為他是一隻鞋嗎?其實他是一個吹風機。作為界面化的系統,瀏覽器框架是不可或缺的,但更加重要的東西在Socket上面。

一、需要解決中央控制端到各節點伺服器之間的通信。
這個其實牽扯到一個通信協議的問題,各語言都有自己的socket,thread的庫,直接調用即可。但是這個通信協議就需要自己來完成了。既不能太簡單,太簡單了,明碼傳輸,如果別人獲知了這個介面,就很容易執行一些令人討厭的操作。也不能太復雜,太復雜了等於是給自己找麻煩,所以簡單的數據包編解碼的工作或者用token驗證的方式是需要的。通信協議起碼要兩種,一種是傳輸命令執行的協議,一種是傳輸文件的協議。

二、跨語言的socket通信
為什麼要跨語言,主控端和代理端通信,用什麼語言開發其實無所謂。但是為了給自己省事,盡可能使用伺服器上已經有了的默認語言,Ambari前期採用php+puppet的方式管理集群,這不是不可以,puppet自己解決了socket通信協議和文件傳輸的問題,可你需要為了puppet在每台伺服器上都安裝ruby。我是個有點伺服器和代碼潔癖的人。光是為了一個puppet就裝個ruby,我覺得心裡特對不起伺服器的資源。所以我自己寫了一個python的代理端。python是不管哪個linux系統在安裝的時候就都會有了。然後主控端的通信,可以用python實現,也可以用php實現,但是考慮到對於更多的使用者來說,改php可能要比改tornado簡單許多,所以就沒用python開發。hadoop分支版本眾多,發布出去,用戶要自己修改成安裝適合自己的hadoop發行版,就勢必要改源碼,會php的明顯比會python的多。php裡面的model封裝了所有的操作,而python只是個操作代理人的角色而已。

所以也延伸出一個問題,什麼語言用來做這種分布式管理系統的代理端比較合適,我自己覺得,也就是python比較合適了,操作系統自帶,原生的package功能基本夠用。用java和php也可以寫agent,但是你勢必在各節點預先就鋪設好jre或者php運行環境。這就跟為什麼用python和java寫mapred的人最多是一樣的。沒人攔著你用nodejs寫mapred,也可以寫,就是你得在每個節點都裝v8的解釋引擎,不嫌麻煩完全可以這樣干。原理參看map/rece論文,不解釋。perl也是操作系統原生帶的,但是perl的可維護性太差了,還是算了吧。

所以這就牽扯到一個跨語言的socket問題,理論上來說,這不存在什麼問題。但這是理論上的,實際開發過程中確實存在問題,比如socket長連接,通信數據包在底層的封裝方式不同。我沒有使用xml-rpc的原因之一就是我聽說php的xmlrpc跟其他語言的xmlrpc有不同的地方,需要修改才能用,我就沒有用這種辦法。最早是自己定義的操作協議,這時就遇到了這些問題,所以後來直接採用了thrift方式。就基本不存在跨語言的socket通信問題了。

三、代理端執行結果的獲取
無論命令還是文件是否在代理端執行成功,都需要獲取到執行結果返回給中央端。所以這里也涉及一個讀取節點上的stdout和stderr的問題。這個總體來說不是很難,都有現成的包。當然這個時候你需要的是阻塞執行,而不能搞非同步回調。
還有個問題是,我要盡可能使用python默認就帶的包,而盡量不讓伺服器去訪問internet下載第三方的包。

還有代理端最重要的一點,就是python的版本兼容性。centos5用python 2.4,centos6用python 2.6,ubuntu基本默認都是2.7。所以一定要最大限度的保證語言的跨版本兼容性,要是每個操作系統和每一個版本我都寫一個代理,我一個人就累死了。

四、瀏覽器端的model,view,controller
這裡面你要封裝好所有的通信協議,以及需要在節點上面執行的腳本。發送文件的操作和資料庫操作也要在model裡面完成。
如果對tcl/tk很熟,也可以寫基於操作系統界面方式的管理,不用瀏覽器就是了。
view對我來說是最痛苦的事,都是現學的jQuery怎麼用,前端的工作太可怕了。關於這方面,沒有太多可描述的,html和js帶給我的只有痛苦的回憶,萬惡的undefined。

五、跨操作系統的安裝文件封裝。
要適應不同的操作系統也是個很麻煩的事情,需要用agent提前獲知操作系統的發行分支,版本號。然後去找到對應的安裝文件去執行。你不能保證一個分布式系統的集群中所有的節點都可以訪問internet,更多的情況是這些節點都存在在一個安全的內網中。只有個別幾個節點是可以訪問外網的。所以,我勢必要把所有的安裝文件以及他們的依賴盡可能集中起來。我不確定安裝操作系統的lzo,yum或者apt-get會去下什麼鬼東西,甚至無論是yum還是apt-get,裡面都沒有hadoop-lzo的庫文件。所以,最好的辦法是自己編譯打包rpm和deb包。直接安裝就好了,別去找repo下載什麼。

這就是第五步工作,把需要的依賴的東西自己編譯打包成rpm和deb。

deb包很好解決,但是rpm就沒那麼好辦了,需要學習rpm的編譯文件如何編寫,這塊是挺麻煩的,但是這玩意用好了還是挺不錯的。現在我自製的安裝包裡面就已經包含了自己編譯的lzo和snappy兩種壓縮庫,以及hadoop-gpl-packaging的rpm和deb。下一個發布的easyhadoop將直接支持centos5,6,suse,以及ubuntu/debian的系統上安裝hadoop。已經自帶了lzo和snappy以及lzop和snzip。

六、把這些所有東西,整合到一個系統裡面。

關聯這些所有事情間的聯系,整合到一個瀏覽器界面裡面去。寫一個分布式的管理腳本不難,寫一個界面也不難,但是也許是我的水平不行,這兩件事結合起來讓他們協同工作還是有點難度的。對我來說,寫界面的工作可能更難一點。

Cloudera可能是十來個人在寫Manager的東西,ambari也是放到github和apache svn上面,apache基金會的各種committer在寫。easyhadoop沒他們功能那麼強大,一年來只有我一個人設計架構,功能,各種語言的編碼,測試,發布。For the love of god, What have I done(英文部分請站在山頂仰天長嘯)? T_T。從前台到後台,到hadoop和生態系統以及他們的依賴軟體的單獨patch、編譯打包。(系統yum或者apt-get的包不如自己打的好使。)

從時間上來看,全球第一款開源的hadoop部署管理系統應該還是屬於ambari,2011年8月開始寫的,2012年9月底進入apache的incubator。我是大概2012年8月開始寫的easyhadoop,全球第一沒趕上,估計國內第一個開源的hadoop管理系統還是可以排上的。

Ⅳ Linux btrfs文件系統及管理

Linux btrfs文件系統及管理

linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理,下面一起來看看什麼是linux btrfs文件系統及管理關系吧!

什麼是btrfs?

Btrfs(B-tree文件系統,通常念成Butter FS,Better FS或B-tree FS),linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理。單文件可達16EB,最大文件數量2^64,最大卷容量16EB,等。

btrfs功能特性

1,COW:寫時復制,每次寫入數據時,先將數據寫入到新的block,寫入成功後,更改舊數據塊指針到新數據塊,而非更改本身。

2,多物理卷支持,btrfs內建raid,可在線增刪磁碟設備,可在線擴展和縮減磁碟空間。

3,數據和元數據校驗碼,checksum

4,子卷,可單獨掛載子卷

5,可寫快照,快照的快照,單個文件快照。

6,透明壓縮

7,ext3/4和btrfs無痛互轉

btrfs 基本用法:

bash/shell Code復制內容到剪貼板

[root@localhost ~]# btrfs --help #查看幫助可以看到btrfs 有很多子命令,用法也很多,這里只舉例常用選項。

usage: btrfs [--help] [--version] [...] []

btrfs subvolume create [-i ] [/] #創建子卷

Create a subvolume

btrfs subvolume delete [options] [...] #刪除子卷

Delete subvolume(s)

btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [--sort=gen,ogen,rootid,path] #顯示子卷列表

List subvolumes (and snapshots)

btrfs subvolume snapshot [-r] [-i ] |[/] #創建子卷快照

Create a snapshot of the subvolume

btrfs subvolume get-default #獲取子卷默認的文件系統

Get the default subvolume of a filesystem

btrfs subvolume set-default #設置默認系統給子卷

Set the default subvolume of a filesystem

btrfs subvolume find-new #列出btrfs文件系統中最近修改的文件,結合find命令

List the recently modified files in a filesystem

btrfs subvolume show #顯示更多的子卷信息

Show more information of the subvolume

btrfs subvolume sync [...] #子卷同步,類似mount同步模式,內存數據同步到磁碟,有待查證。

Wait until given subvolume(s) are completely removed from the filesystem.

btrfs filesystem df [options] #顯示掛載的文件系統詳細信息。

Show space usage information for a mount point

btrfs filesystem show [options] [|||label] #顯示創建文件系統的磁碟信息。

Show the structure of a filesystem

btrfs filesystem sync #強制文件系統同步,

Force a sync on a filesystem

btrfs filesystem defragment [options] |

[|...] #碎片整理

Defragment a file or a directory

btrfs filesystem resize [devid:][+/-][kKmMgGtTpPeE]|[devid:]max #btrfs文件系統在線擴展和縮減空間

Resize a filesystem

btrfs filesystem label [|] [] #改變btrfs文件系統卷標

Get or change the label of a filesystem

btrfs filesystem usage [options] [..] #顯示文件系統當前的使用信息。

Show detailed information about internal filesystem usage .

btrfs balance start [options] #改變磁碟chunk,在線改 數據和元數據 存儲方式,單盤改raid,前提滿足raid要求。

Balance chunks across the devices

btrfs balance pause #暫停chunk更改,數據量較大,轉換時間較長時,先暫停。

Pause running balance

btrfs balance cancel #取消chunk更改,如上

Cancel running or paused balance

btrfs balance resume #中斷balance的操作,如上

Resume interrupted balance

btrfs balance status [-v] #顯示balance操作狀態 如上

Show status of running or paused balance

btrfs device add [options] [...] #文件系統增加磁碟

Add a device to a filesystem

btrfs device delete [...] #文件系統刪除磁碟

Remove a device from a filesystem

btrfs device scan [(-d|--all-devices)| [...]] #文件系統磁碟掃描

Scan devices for a btrfs filesystem

btrfs device ready #猜測是檢測加入的設備有沒有被掛載

Check device to see if it has all of its devices in cache for mounting

btrfs device stats [-z] | #顯示文件系統的設備狀態

Show current device IO stats. -z to reset stats afterwards.

btrfs device usage [options] [..] #顯示文件系統內部設備詳細使用信息

Show detailed information about internal allocations in devices.

btrfs文件系統管理

為分區創建btrfs文件系統

bash/shell Code復制內容到剪貼板

[root@localhost ~]# fdisk -l | grep "^Disk /dev/sd[a-z]" #准備sd{b,c,d,e}4塊20G磁碟,未做任何分區。

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors

創建單分區btrfs並查看

bash/shell Code復制內容到剪貼板

[root@localhost ~]# mkfs.btrfs -L 'btrfs' /dev/sdb

btrfs-progs v3.19.1

See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536

Turning ON incompat feature 'skinny-metadata': reced-size metadata extent refs

fs created label btrfs on /dev/sdb

nodesize 16384 leafsize 16384 sectorsize 4096 size 20.00GiB

[root@localhost ~]# btrfs filesystem show

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 1 FS bytes used 112.00KiB

devid 1 size 20.00GiB used 2.04GiB path /dev/sdb

btrfs-progs v3.19.1

[root@localhost ~]# mount -o compress=lzo -L btrfs /btrfs/ 掛載時可以設定透明壓縮機制。

[root@localhost ~]# btrfs filesystem df /btrfs

Data, single: total=8.00MiB, used=256.00KiB

System, DUP: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, DUP: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

再添加一塊磁碟

bash/shell Code復制內容到剪貼板

[root@localhost ~]# btrfs device add /dev/sdc /btrfs #添加磁碟,刪除用btrfs device delete /dev/sdc /btrfs

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 20.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]#

在線增加或縮減空間,在線改變空間,可以讓lvm坐冷板凳了。

bash/shell Code復制內容到剪貼板

[root@localhost ~]# btrfs fi resize -10G /btrfs/ #在線縮減空間

Resize '/btrfs/' of '-10G'

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 10.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]# btrfs fi resize +7G /btrfs/ #在線增加空間

Resize '/btrfs/' of '+7G'

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 17.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]#

在線更改數據和元數據的結構

bash/shell Code復制內容到剪貼板

[root@localhost ~]# btrfs fi df /btrfs/

Data, single: total=8.00MiB, used=256.00KiB

System, DUP: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, DUP: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost ~]# btrfs balance start -mconvert=raid1 /btrfs/ #-mconvert 為改變metadata元數據區的存儲結構

Done, had to relocate 4 out of 5 chunks

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 192.00KiB

devid 1 size 17.00GiB used 296.00MiB path /dev/sdb

devid 2 size 20.00GiB used 288.00MiB path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]# btrfs fi df /btrfs/

Data, single: total=8.00MiB, used=64.00KiB

System, RAID1: total=32.00MiB, used=16.00KiB

Metadata, RAID1: total=256.00MiB, used=112.00KiB #對比上改為了raid1

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost ~]# btrfs balance start -dconvert=raid1 /btrfs/ #-dconvert 為改變data數據區的存儲結構

Done, had to relocate 1 out of 3 chunks

Ⅳ 如何交叉編譯mkfs.jffs2等工具鏈mtd-utils

首先說明一下:
在YAFFS2源文件的utils目錄下,執行make就可以生成 mkyaffs2image工具,執行
.(要製作yaffs2的目錄) (目標鏡像)/mkyaffs2image

acl_2.2.47.orig.tar.gz
lzo-2.03.tar.gz
mtd-utils_20080508.orig.tar.gz
zlib-1.2.3.tar.gz
mkfs.jffs2.for.arm-linux-gcc.3.4.1平台.tar.bz2
mkfs.jffs2.for.arm-linux-gcc.4.3.2平台.tar.bz2
mkfs.jffs2.for.pc平台.tar.bz2

如果只需要mkfs.jffs2工具,那麼ubuntu 8.10下直接安裝jffnms軟體包即可,
luther@gliethttp:~$ sudo apt-get install jffnms
如果需要將jffs2移植到arm開發板上,那麼就需要下載源碼進行交叉編譯了,這就是本文的內容.
1.下載工具軟體源碼包
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/m/mtd-utils/mtd-utils_20080508.orig.tar.gz
luther@gliethttp:~$ wget http://www.zlib.net/zlib-1.2.3.tar.gz
luther@gliethttp:~$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
luther@gliethttp:~$ mkdir libs 用來存放下面生成的lib庫.
2.編譯zlib庫
luther@gliethttp:~/zlib-1.2.3$ ./configure --prefix=~/libs --shared
對於交叉編譯輸入如下指令
luther@gliethttp:~/zlib-1.2.3$ CC=arm-linux-gcc ./configure --prefix=~/libs --shared
luther@gliethttp:~/zlib-1.2.3$ make -j4
luther@gliethttp:~/zlib-1.2.3$ make install
luther@gliethttp:~$ tree ~/libs
/home/ubuntu/libs
|-- include
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- libz.so -> libz.so.1.2.3
| |-- libz.so.1 -> libz.so.1.2.3
| `-- libz.so.1.2.3
`-- share
`-- man
`-- man3
`-- zlib.3
5 directories, 6 files
這就表示完成了.
3.編譯lzo庫
luther@gliethttp:~/lzo-2.03$ ./configure --prefix=/home/ubuntu/libs --enable-shared
對於交叉編譯輸入如下指令
luther@gliethttp:~/lzo-2.03$ CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/ubuntu/libs --enable-shared --disable-static
這個還必須要絕對路徑才行.
luther@gliethttp:~/lzo-2.03$ make
luther@gliethttp:~/lzo-2.03$ make install
luther@gliethttp:~$ tree ~/libs
.
|-- include
| |-- lzo
| | |-- lzo1.h
| | |-- lzo1a.h
| | |-- lzo1b.h
| | |-- lzo1c.h
| | |-- lzo1f.h
| | |-- lzo1x.h
| | |-- lzo1y.h
| | |-- lzo1z.h
| | |-- lzo2a.h
| | |-- lzo_asm.h
| | |-- lzoconf.h
| | |-- lzodefs.h
| | `-- lzoutil.h
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- liblzo2.a
| |-- liblzo2.la
| |-- liblzo2.so -> liblzo2.so.2.0.0
| |-- liblzo2.so.2 -> liblzo2.so.2.0.0
| |-- liblzo2.so.2.0.0
| `-- libz.a
`-- share
`-- man
`-- man3
`-- zlib.3
6 directories, 22 files
手工將靜態庫刪掉就行了,
如果是arm平台還需要strip優化.
4.編譯mtd-utils-20080508前的准備工作.
編譯之前的代碼工作
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/a/acl/acl_2.2.47.orig.tar.gz
luther@gliethttp:~$ mkdir libs/include/sys -p
luther@gliethttp:~$ cp acl-2.2.47/include/acl.h libs/include/sys
luther@gliethttp:~/mtd-utils-20080508$ export LD_LIBRARY_PATH=~/libs/lib:$LD_LIBRARY_PATH
如果還找不到-llzo2,那麼把他拷到/usr/lib下,對於交叉編譯器,就是拷貝到
比如
luther@gliethttp:~/libs/lib$ sudo cp -a * /vobs/tools/arm-tools/arm-linux-gcc-3.4.1/arm-linux/lib/
luther@gliethttp:~/mtd-utils-20080508$ vim Makefile
修改安裝路徑
DESTDIR=.
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
修改CFLAGS變數
CFLAGS := -I./include -I/home/ubuntu/libs/include $(OPTFLAGS)
如果是arm-linux-gcc定義為
CFLAGS := -I./include -I/home/ubuntu/libs/include -DAI_ADDRCONFIG=0x0020 $(OPTFLAGS)
來自/usr/include/netdb.h
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/Makefile
DESTDIR := ~/mtd-utils-20080508
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
luther@gliethttp:~/mtd-utils-20080508$ vim recv_image.c
拷貝/usr/include/netinet/in.h文件中
arm-linux-gcc中不需要拷貝它.
struct ip_mreq
{

struct in_addr imr_multiaddr;

struct in_addr imr_interface;
};
結構體數據到頭部,否則在u盤版的ubuntu 8.10上老是提示沒有ip_mreq定義,雖然上面明明寫了#define _USE_MISC
arm-linux-gcc中還需要創建如3下個目錄
luther@gliethttp:~/mtd-utils-20080508$ mkdir arm-linux
luther@gliethttp:~/mtd-utils-20080508$ cp -r ubi-utils arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ cp -r include arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/libpfiflash.c
將所有EBUF(PFIFLASH_ERRSTR[-rc]);全部替換為EBUF("%s", PFIFLASH_ERRSTR[-rc]);
vim下替換腳本為
:%s/EBUF(PFIFLASH_ERRSTR\[-rc\]);/EBUF("\%s", PFIFLASH_ERRSTR\[-rc\]);/g
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/ubimirror.c
將第206行的
fprintf(stderr, err_buf);
改為
fprintf(stderr, "%s", err_buf); // 想法是好的,因為err_buf中含有%d等format信息,這樣介面更加統一,但是編譯器似乎還並不支持這樣的操作.[luther.gliethttp]
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/unubi.c
將第898行
char fname[PATH_MAX];
改為
char fname[PATH_MAX+1];
luther@gliethttp:~/mtd-utils-20080508$ cd ubi-utils/new-utils
因為-O2優化的原因,會導致如下log信息
error: ignoring return value of 『scanf』, declared with attribute warn_unused_result
所有手工先編譯.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
對於交叉編譯執行如下1條語句
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ arm-linux-gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ cd -
好了,上面的所有修改完成之後,就可以執行make成功編譯了[luther.gliethttp].
luther@gliethttp:~/mtd-utils-20080508$ make
如果是交叉編譯,執行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux-
luther@gliethttp:~/mtd-utils-20080508$ make install
對於交叉編譯,執行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux- install
luther@gliethttp:~/mtd-utils-20080508$ tree gliethttp/
gliethttp/
|-- sbin
| |-- bin2nand
| |-- doc_loadbios
| |-- docfdisk
| |-- flash_erase
| |-- flash_eraseall
| |-- flash_info
| |-- flash_lock
| |-- flash_otp_mp
| |-- flash_otp_info
| |-- flash_unlock
| |-- flashcp
| |-- ftl_check
| |-- ftl_format
| |-- jffs2mp
| |-- mkbootenv
| |-- mkfs.jffs2
| |-- mkpfi
| |-- mtd_debug
| |-- nand2bin
| |-- nandmp
| |-- nandtest
| |-- nandwrite
| |-- nftl_format
| |-- nftlmp
| |-- pddcustomize
| |-- pfi2bin
| |-- pfiflash
| |-- recv_image
| |-- rfdmp
| |-- rfdformat
| |-- serve_image
| |-- sumtool
| |-- ubiattach
| |-- ubicrc32
| |-- ubicrc32.pl
| |-- ubidetach
| |-- ubigen
| |-- ubimirror
| |-- ubimkvol
| |-- ubinfo
| |-- ubinize
| |-- ubirmvol
| |-- ubiupdatevol
| `-- unubi
`-- share
`-- man
`-- man1
`-- mkfs.jffs2.1.gz
4 directories, 45 files
ep9312開發板上沒有任何文件系統flash數據讀取
# ./mtd_debug read /dev/mtd0 0 100 gliethttp.bin
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
# hexmp gliethttp.bin
0000000 03ff ea00 350c e59f 001c e583 410e e3a0
0000010 4004 e583 4a03 e3a0 4001 e254 fffd 1aff
0000020 4106 e3a0 4004 e583 420f e202 5000 e594
0000030 4001 e084 5000 e594 4001 e084 5000 e594
0000040 4001 e084 5000 e594 4010 e3a0 4008 e583
0000050 4050 e3a0 4001 e254 fffd 1aff 4e1e e3a0
0000060 4008 e583
0000064
#
# ./mtd_debug read /dev/mtd2 0 100 gliethttp.bin;hexmp gliethttp.bin -Cv
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
00000000 1f 8b 08 00 ca 14 7d 4a 02 03 e4 5a 0f 70 93 e7 |......}J...Z.p..|
00000010 79 7f 3f 49 36 b2 31 41 80 a0 0e 38 cd 57 70 16 |y.?I6.1A...8.Wp.|
00000020 93 18 f3 19 3b 60 12 9a d9 60 08 09 4e 22 c0 a4 |....;`...`..N"..|
00000030 b4 81 ca 42 92 6d 0d 59 d2 49 72 02 2b 4d dd 60 |...B.m.Y.Ir.+M.`|
00000040 72 84 e1 86 03 a7 21 01 8a d2 b2 4b 2e f3 56 76 |r.....!....K..Vv|
00000050 63 b7 34 0b 1d cd b1 1d 6b b3 95 36 dc 95 db d1 |c.4.....k..6....|
00000060 8b 90 d1 ea |....|
00000064

Ⅵ 壓縮方法有哪些各有什麼優缺點,壓縮比是多少呢主要是在linux下代碼壓縮的rar或zip大部分都是win下

壓縮比率很難說,未壓縮數據的復雜程度會影響這個比率。
常見壓縮演算法按壓縮比率由大到小排:
paq系 > lzma系 > rar > bzip2 > lz系(gz、zip) > lzo

paq相當費時而且耗內存,有點不值得使用;lzma是目前硬體水平可接受的高壓縮比演算法(7z就屬於此類洐生品);rar沒什麼好說的,商業演算法,我覺得比bzip2費時上還好點;lzo雖然壓縮比率不那麼歷害,但高速、內存需求極少是其亮點,在需要實時壓縮、解壓的場合非常受歡迎,例如網路通迅、資料庫。

linux中最常用tar.gz格式(winrar支持解壓)。
命令通常是這樣: tar czvf abc.tar.gz name1 name2 ...
解釋一下參數czvf
c 建立
v 詳細信息
f 輸出文件,後面一定跟生成的壓縮文件名。
z 用gz壓縮
(其它壓縮還有:
Z compress壓縮,幾乎沒人用的老舊lz演算法
j bzip2壓縮
J xz壓縮,lzma的改進演算法
也可在最後加參數 --lzop 或 --lzip 或 --lzma)

生成tar.gz其實經過兩個處理過程的,首先tar將所有文件的信息集合成一個無壓縮的tar格式(無需寫到磁碟),再用gz壓縮演算法處理(很像rar的solid選項)。這樣的壞處是,如果你只要解壓其中一個文件,解壓時也要讀取壓縮文件前面很大部分內容。

Ⅶ linux下調用lzo函數是為什麼出現No such file or directory

提示都說了沒有那樣的文件或者目錄了,是不是你那個函數裡面調用了什麼文件,或者根本沒有那個函數。

Ⅷ 在hadoop目錄下,通過執行哪一項指令可以執行解壓縮命令

需要在linux系統下自行安裝lzop命令。在hadoop中使用lzo的壓縮演算法可以減小數據的大小和數據的磁碟讀寫時間,在HDFS中存儲壓縮數據,可以使集群能保存更多的數據,延長集群的使用壽命。Hadoop是一個由Apache基金會所開發的分布式系統基礎架構,用戶可以在不了解分布式底層細節的情況下,開發分布式程序。

Ⅸ linux lzop 支持目錄壓縮嗎

不行,不過可以配合tar對目錄進行打包。
tar c test/ | lzop - > test.tar.lzo
lzop -dc test.tar.lzo | tar x

Ⅹ linux下怎麼打開lzo文件查看文件內容

lzo 是壓縮文件。
一般 Linux 下面的壓縮都是流壓縮,也就是只能壓縮一個文件。這種文件是沒辦法看內容的,只能直接解壓縮。

圖形界面雙擊即可。

熱點內容
譚浩強c語言第三版課後答案 發布:2025-05-14 04:37:31 瀏覽:58
san存儲和nas存儲 發布:2025-05-14 04:34:44 瀏覽:151
幽靈戰士3什麼配置 發布:2025-05-14 04:33:53 瀏覽:113
安卓的虛擬機哪個好用 發布:2025-05-14 04:32:34 瀏覽:870
宿遷存儲式化工設備 發布:2025-05-14 04:32:33 瀏覽:53
s7200編程s7200 發布:2025-05-14 04:28:32 瀏覽:413
安卓定製版蘋果手機是什麼意思 發布:2025-05-14 04:26:27 瀏覽:379
如何搭建php環境虛擬伺服器免費 發布:2025-05-14 04:25:37 瀏覽:103
相冊加密怎麼看 發布:2025-05-14 04:24:53 瀏覽:573
怎麼壓縮郵件 發布:2025-05-14 04:16:51 瀏覽:497