Reconstruindo a árvore da partição reiserfs sem espaço livre restante

1
$ dd if=/dev/zero of=qqq bs=1M count=40
$ mkfs.reiserfs -f qqq
ReiserFS is successfully created on qqq.
$ mountlo-0.6 qqq ~/mnt/tmp
$ cat /dev/frandom > ~/mnt/tmp/qqq
cat: write error: No space left on device
$ df ~/mnt/tmp/
Filesystem           1K-blocks      Used Available Use% Mounted on
mountlo#qqq              40952     40952         0 100% /home/vi/mnt/tmp
$ killall mountlo-0.6

$ reiserfsck --rebuild-tree qqq
####### Pass 1 #######
Looking for allocable blocks .. finished
0%....20%....40%....60%.Not enough allocable blocks, checking bitmap...there are 1 allocable blocks, btw

out of disk space
Aborted

Como recuperar o sistema de arquivos agora? Para reconstruir a árvore, preciso ampliar a partição. Para ampliar a partição, preciso limpá-lo. Para limpar, preciso usar o reiserfsck; e finalmente o reiserfsck oferece a reconstrução da árvore.

Como reconstruir a árvore para outro dispositivo (ou apenas salvar todos os dados em outra partição)?

    
por Vi. 06.12.2010 / 18:30

1 resposta

2

Você precisa de mais espaço para trabalhar. No caso do seu arquivo qqq você pode anexá-lo com dd. Uma vez que você tenha mais espaço livre para trabalhar com a reconstrução, o superbloco do sistema de arquivos que irá detectar a contagem de blocos do sistema de arquivos está errado. Com o novo superbloco escrito, você pode reconstruir a árvore. Supondo que seu arquivo ainda esteja desmontado:

$ dd if=/dev/zero bs=1M count=10 >> qqq
$ reiserfsck --rebuild-sb qqq
# ... snip
Did you use resizer(y/n)[n]: n
rebuild-sb: wrong block count occured (10240), fixed (12800)
rebuild-sb: wrong tree height occured (65535), zeroed
Reiserfs super block in block 16 on 0x0 of format 3.6 with standard journal
Count of blocks on the device: 12800
# ... snip
Fs state field: 0xfa03:
    FATAL corruptions exist.
     some corruptions exist.
sb_version: 2
inode generation number: 7
UUID: 04993a54-22cc-4bb3-a367-53986e94a6e0
LABEL:
Set flags in SB:
    ATTRIBUTES CLEAN
Is this ok ? (y/n)[n]: y
The fs may still be unconsistent. Run reiserfsck --check.

$ reiserfsck --rebuild-tree qqq
# ... snip
Pass 0:
####### Pass 0 #######
Loading on-disk bitmap .. ok, 12800 blocks marked used
Skipping 8211 blocks (super block, journal, bitmaps) 4589 blocks will be read
0%....20%....40%....60%....80%....100%                        left 0, 4589 /sec
2 directory entries were hashed with "r5" hash.
    "r5" hash is selected
Flushing..finished
    Read blocks (but not data blocks) 4589
            Leaves among those 3
            Objectids found 4

Pass 1 (will try to insert 3 leaves):
####### Pass 1 #######
Looking for allocable blocks .. finished
0%....20%....40%....60%....80%....100%                           left 0, 0 /sec
Flushing..finished
    3 leaves read
            3 inserted
####### Pass 2 #######
Flushing..finished
Pass 3 (semantic):
####### Pass 3 #########
Flushing..finished
    Files found: 1
    Directories found: 3
Pass 3a (looking for lost dir/files):
####### Pass 3a (lost+found pass) #########
Looking for lost directories:
Flushing..finishede 3, 0 /sec 
Pass 4 - finished       done 3, 0 /sec
Flushing..finished
Syncing..finished
###########
reiserfsck finished at Thu Sep  4 13:02:07 2014
###########
$ 

Eu testei isso em um antigo sistema RedHat EL4 (modded kernel para suportar reiserfs) e o resultado final foi que o arquivo qqq era montável e mostrava o espaço livre.

$ sudo mount -o loop -t reiserfs qqq mnt
$ df -h
# ... snip
/home/areid/qqq        50M   40M   10M  81% /home/areid/mnt
    
por 04.09.2014 / 15:24