顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - lay

頁: [1]
1
Linux 討論版 / undelete ext3
« 於: 2004-04-22 10:20 »
多謝netman , 現已可執行了.
正如其他網頁所說, 回復ext2 的方法不能回復ext3的,
因此這個程式也不能回復 ext3 的檔案,有沒有其他方法?
另外, cat undelfile.sh.bak | col -b > undelfile.sh 有甚麼作用?

2
Linux 討論版 / undelete ext3
« 於: 2004-04-21 18:44 »
在 redhat linux 8.0

3
Linux 討論版 / undelete ext3
« 於: 2004-04-21 15:54 »
我在其他留言板看到一個可以回復 ext2/ext3 檔案的程式,
當我用 chmod 成為可執行後, 然後輸入
#./undelfile.sh
結果如下
: bad interpreter: No such file or directory
 
我的問題是:
(1) 甚麼地方出錯?
(2) 這個程式是否真的可以回復ext3檔案呢?

有關描述及程式如下:

I wrote a script to do mass undeletion (just an experiment), here's the code. Save it as "undelfile.sh", make executable and run w/o args for some basic details. If for example your (ext2 or ext3) /tmp partition has enough space to hold ALL stuff that can be undeleted, you could run it as "./undelfile.sh --automate-it-all /tmp /dev/hdc5". It would then try to recover ANY RECOVERABLE FILE to /tmp/lost+found.

Please note I don't take responsability for fsck ups and YMMV(VM).




code:--------------------------------------------------------------------------------
#!/bin/bash
# Purpose: Undelete files on ext2fs and ext3fs
# Args: l,s,u,t,--automate-it-all
# Deps: Bash, GNU utils, debugfs, file, magic, md5sum, sha1sum
# Run from: manual

# Prepstage functions
progn=$(basename $0)
# Access custom functions
#. /etc/bash_functions

__help() { echo -e "$progn: <cmd> </dest> </dev/part>
</dest>: VFS dir where \"lost+found\" resides
</dev/part>: partition to recover from
<cmd>, in logical order:
1: -l </dest> </dev/part> (generates inode master list)
2: -s </dest> </dev/part> (generates inode statistics from list)
3: -u </dest> </dev/part> (<inode> or empty to add regex)
4: -t  </dest> (tags inodes using commands: file, md5sum and sha1sum)

>>>> ALWAYS RECOVER TO -=ANOTHER PHYSICAL PARTITION=- <<<<
"; exit 1; }

__testto() { test -d "$1/lost+found" && dest="$1/lost+found" || __help; }
__testfrom() { chk=( $(file "$1") )
case "${chk[1]}${chk[2]}" in blockspecial) src="$1";; *) __help;; esac; }

case "$1" in
l|-l|--generate-list) __testto "$2" && __testfrom "$3"
######################################################################################
/sbin/debugfs -R "lsdel" "$src" 2>&1> "$dest/0_fullinodelist" && \
echo "Inode info is "$dest/0_fullinodelist""

test -f "$dest/0_fullinodelist" && ( egrep "$dest/0_fullinodelist" -vie \
"(debugfs|inodes found|deleted)"|cut -c1-6|grep "[0-9]" >"$dest/0_inodes"
test -f "$dest/0_inodes" && echo "Inode list is "$dest/0_inodes"" ) || exit 127

echo "Calculating necessary diskspace"
space=0; egrep "$dest/0_fullinodelist" -vie "(debugfs|inodes found|deleted)" \
| while read l; do l=( ${l} ); let space=$space+${l[3]}
echo $space >"$dest/0_space"; done
space=$(echo $(cat "$dest/0_space")/1024/1024|bc)
echo "We need ${space}MB space to recover everything"
echo "Checking remaining diskspace"

sfdisk -l -uM|egrep -vie "(disk|units|device)"|tr -d "\+\-\*"\
|grep "^/dev"|egrep -vie "(swap|empty|lba|hidden)"\
|while read s; do s=( ${s} )
if [ "${s[3]}" -ge "$space" ]; then
        echo "${s[0]} has SIZE ${s[3]}MB"
fi; done

\df -m|egrep -vie "($src|filesystem|tmpfs)"|while read s; do s=( ${s} )
if [ "${s[3]}" -ge "$space" ]; then
        echo "mounted ${s[5]} has ${s[3]}MB left (could do)"
else
        echo "mounted ${s[5]} has ${s[3]}MB left (insufficient)"
fi; done
;;

s|-s|--inode-stats)  __testto "$2" && __testfrom "$3"
######################################################################################
# Next add regex search tru 0_fullinodelist
test -f "$dest/0_inodes" && ( tac "$dest/0_inodes" | while read inode; do
        /sbin/debugfs -R "stat <$inode>" "$src" 2>&1>"$dest/0_stat_$inode"
done ) || echo failed 128
;;

u|-u|--undelete)  __testto "$2" && __testfrom "$3"
######################################################################################
# Next add easy choices like "today", "this week", "this month", "this aeon"
if [ "X$4" = "X" ]; then
        echo "Get the inode from "$dest/0_inodes" or see "$dest/0_fullinodelist""

        unset ans; echo -e "Want to refine search and dump, or dump everything?
        [Y|y|yes|R|r|refine] to refine
        [A|a|all] to dump everything (watch out, I'm not checking!!!)
        [Q|q|quit|(anything else)] to quit"; read ans
        case "${#ans}" in 0) exit 129;; *) ans=$(echo $ans|tr [A-Z] [a-z]);; esac

        case "${ans:0:1}" in
         y|r) echo -e "OK, Give me a std regex. Remember a debugfs line looks like this:
        25894      0 100644   3576    1/   1 Wed Sep 26 15:57:34 2001
        and the date given is the TIME OF DELETION so no MAC times.
        So, that's all you can use. Hope you are creative.
        Example :\"Dec.*2001\" is used as 'grep list -Eice \"^[0-9].*Dec.*2001\"'"
        read regex; res=$(grep "$dest/0_fullinodelist" -Eice "^[0-9].*${regex}")
        printf "%sWe used: \"^[0-9].*${regex}\" and got $res hits)\n"

        unset ans; echo "See [r]esults or se regex for recovery? [s|u]"; read ans
        case "${#ans}" in 0) exit 130;; *) ans=$(echo $ans|tr [A-Z] [a-z]);; esac
        case "${ans:0:1}" in
        r) grep "$dest/0_fullinodelist" -Eie "^[0-9].*${regex}";;
        u) grep "$dest/0_fullinodelist" -Eie "^[0-9].*${regex}"|awk '{print $1}'\
           |while read inode; do /sbin/debugfs -R "dump <$inode> $dest/$inode" $src
           done;;
        esac
         ;;

         a) echo "cat "$dest/0_inodes" | while read inode; do"
           echo "/sbin/debugfs -R \"dump <$inode> $dest/$inode\" $src"
           echo "done"
         ;;

         q|*) exit 1
         ;;

        esac
        exit 0
else    
        /sbin/debugfs -R "dump <$4> $dest/$4" $src
fi
;;

t|-t|--tag)  __testto "$2"
######################################################################################
echo "Making output of file, md5 and sha1 command"
find $dest -iname "[0-9][0-9][0-9]*" | while read inode; do
        file "$inode" 2>&1 >> "$dest/0_inodes.file"
        md5sum "$inode" 2>&1 >> "$dest/0_inodes.sums"
        sha1sum "$inode" 2>&1 >> "$dest/0_inodes.sums"
done
;;

--automate-it-all) __testto "$2" && __testfrom "$3"
######################################################################################
echo "Too late... you set the gears in motion..."
echo "This one only stops when done or when out of diskspace..."
# Newest inodes first.
/sbin/debugfs -R "lsdel" "$src" | egrep -vie "(debugfs|inodes found|deleted)"\
|cut -c1-6|grep "[0-9]">"$dest/0_inodes"; tac "$dest/0_inodes"|while read inode; do
/sbin/debugfs -R "dump <$inode> $dest/$inode" $src; done
find $dest -iname "[0-9][0-9][0-9]*" | while read inode; do
file "$inode" 2>&1 > "$inode.file"; md5sum "$inode" 2>&1 > "$inode.md5"
sha1sum "$inode" 2>&1 > "$inode.sha1"; done
;;

h|-h|--help|ohcrap|whathavidone|*)
######################################################################################
        __help
        ;;
esac

exit 0

4
多謝 netman 大哥提供參考文章, firewall 是有使用nat 的, 由於 firewall 是由其他公司負責管理, 他們只說firewall 的設定沒有錯, 但我從firewall 的用戶版面發現它的確 reject 了很多從內部主機到電郵伺服器的packet.  

現在有關smtp 的設定是這樣:
由wan 到dmz : accept tcp 以任何ip及任何port 連到電郵伺服器的真ip或假ip的port 25
由dmz 到wan : 沒有限制

5
在防火牆後, 電郵伺服器(mail.domain.com)及其他伺服器在dmz 內, 網絡並沒有dns server, 只指向 isp 的dns, 客戶的電郵地址是 user@domain.com, 電郵伺服器是 redhat 7.2 + sendmail + openwebmail,  電郵伺服器內的用戶不能接收其他主機 (host1.domain.com)  發出的電郵, 但寄出外部的電郵卻正常, 而電郵伺服器也能收外部的郵件, 請指教.

6
Linux 討論版 / redhat 8 顯示中文檔名
« 於: 2003-05-15 09:17 »
在其他討論組看到修改 /etc/fstab 中的default 為 iocharset=c950,default
然後reboot ,便可顯示中文檔名.

我依著做後卻不能成功開機.

錯誤訊息包括: (1) /var/log 是唯讀的,log file 不能寫入
                           (2) 不能 mount filesystem
                    (3) 系統最後在執行system logger 時停頓

7
Linux 討論版 / 系統不能登入
« 於: 2003-01-03 14:13 »
登入後,發現:
(1)  /var 只用了58%
(2) 有一個非常大的log 檔案 ( lastlog), 用pico 也不能開啟, 現在已刪除.
(3) 在 /var/spool/log/mailman 中, 執行 ls 時, 沒有回應, 要用 ^z 停止.
 
雖然現時server 已能運作, 但問題的根源是甚麼?

8
Linux 討論版 / 系統不能登入
« 於: 2003-01-02 17:02 »
主機是 redhat 7.2 + apache + mysql

主機無故停止回應, 唯有按reset 重新開機, boot 機時出現以下信息:

invalid operand : 0000
CPU : 0
EIP: 0010[<...>]
EFLAS: ....

Process syslogd
touch : creating /var/lock/subsys/ircd : No space left on device

/etc/rc.d/rc : /etc/rc5.d/s99local:bad interpreter : Permission denied

Starting wine :              [ok]

(hang 機)

應怎麼辦? :cry:

9
Linux 討論版 / Openwebmail 不能顯示中文
« 於: 2002-10-03 16:12 »
但我用其他webmail 試收由yahoo 英文版寄出的中文信, 有些只可以顯示中文標題, 有些是可以顯示中文標題及中文內容, 這是否與收信的mail server 設定有關?

10
Linux 討論版 / Openwebmail 不能顯示中文
« 於: 2002-10-03 15:43 »
當我使用 yahoo 中文版寄信,我的mail server 收到該信後便可以顯示中文字, 但如果用 yahoo 英文版寄,雖然仍然收到該信,卻不能顯示中文, 怎麼辦?

11
Linux 討論版 / Openwebmail 不能顯示中文
« 於: 2002-10-03 08:21 »
login 後已設定,  menu 是中文 , 但仍是不能顯示中文信件

12
Linux 討論版 / Openwebmail 不能顯示中文
« 於: 2002-10-02 21:39 »
openwebmail.conf 已重設,
仍是不能顯示中文, 我用telnet 到 var/spool/mail 看,
發現除了不能顯示中文外, charset 不是 us

13
Linux 討論版 / 求救!被攻擊
« 於: 2002-10-02 09:48 »
我是linux 新手,中了.cinik slapper worm, 它將.cinik 復製到很多sub-dir 裏,
看見湯包兄寫了一句command 將所有 apache 的file 刪除, 可否修改至只是
刪除 .cinik 的file

14
Linux 討論版 / Openwebmail 不能顯示中文
« 於: 2002-10-02 01:11 »
本人按本站 " 技巧心得 " 安裝 openwebmail 在 redhat 7.3 裏 ,
但發現不能顯示從外面寄來的中文字,只能正常顯示英文,
而在本機寄出的中文信卻沒有問題

15
Linux 討論版 / 怎樣修改swap 的大小?
« 於: 2002-06-17 11:32 »
在redhat 7.0 內, 怎樣修改swap 的大小?

16
Linux 討論版 / 不能 send 信
« 於: 2002-04-04 00:52 »
請問甚麼是sticky bit , 有甚麼用?

17
Linux 討論版 / 不能 send 信
« 於: 2002-04-03 19:10 »
我的 mail server 是redhat 7.0 + imp 2.6
最近因在多人同時連線時, 系統出現問題,
於是將 /var/tmp link 到 /home/tmp
但結果當用戶寄信時出現 sending error 的信息,
查看maillog 時, 發現有以下信息:
Mailbox lock file /tmp/.1605.b8f04 open failure: Permission denied

18
網頁技術 / 不能傳送所有文字
« 於: 2002-03-24 21:53 »
以下是我用 asp 讀取access 資料庫時, 所遇到的問題, 請指教.
問題一:  
在文字類型的欄位中如有空格, 空格後的文字不能傳送

問題二:
一些香港常用字如 王+京  ,  足+宗 不能顯示

19
Linux 討論版 / /dev/hdc2 滿了
« 於: 2002-03-08 08:52 »
我的 mail server 是用 RH 7.0 , 昨晚突然 down 了,
今天 reboot 後, 總算回復正常,
用 df -all 檢查, 出現以下信息,

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc2 254276 254244 0 100% /
. .
. .

輸入 cd /dev/hdc2 後, 回應是 no such file or directory
怎樣釋放這些空間?

頁: [1]