LINUX.ORG.RU

не могу сдвинуть начало раздела с reiserfs


0

0

диск разбит таким образом:

hda1 ext2 /boot
hda2 swap swap
hda5 ext3 /
hda6 reiserfs /home

понадобилось отгрызть у hda5 несколько гигов и прилепить их к hda6
LVM к сожалению не использую.

уменьшил с помощью parted hda5, но теперь не могу увеличить hda6.
parted говорит что не умеет reiserfs. Погуглил, в новой версии уже научился, но начало партиции с reiserfs не умеет сдвигать.
resize_reiserfs тоже начало двигать не может.

Что можете посоветовать?

★★★★★

Одолжить где-то на 1 день винт и мигрировать на LVM

INFOMAN ★★★★★
()
Ответ на: комментарий от sdio

С таким успехом я мог бы просто mkdir /foo && ln -s /foo /home/foo сделать.

Я тут подумал. Сдвинуть начало партиции назад не проблема. Но получится что фс будет находится не с начала партиции. а на некотором смещении offset от начала партиции.
Если допустим сделать что-то вроде:

#!/bin/bash

dev=/dev/hda6
offset= #размер позаимствованного куска
number= #количество блоков размером offset в фс _до_ изменения её размера. округляется в большую сторону

for ((n=1;n<=$number;n+=1)); do
dd if=$dev of=$dev bs=$offset skip=$n count=$offset seek=$(($n-1)) || ( echo $n ; break )
done;

Nao ★★★★★
() автор топика
Ответ на: комментарий от Nao

ну и потом занулить оставшийся хвост и увеличить фс

Nao ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Мысль правильная, но вы можете партицию потерять, если ошибётесь.

Значит мне нельзя ошибаться =)

Я вот тут ещё подумал. Зачем переносить кусками. Ведь можно сделать просто

dd if=$dev of=$dev bs=512 skip=$offset #(offset в секторах)

по теории dd читает и записывает блоками размером в bs (=512 байт).
Не может ли dd каким-то образом объеденить несколько read/write операций (и тем самым потенциально подложить свинью)
либо поменять порядок следования этих операций?

Впринципе я тестировал этот приём на файле с самым худшим вариантом в offset=1 сектору.

dd if=/dev/urandom of=/tmp/foo1 bs=512 count=100 # создём "файловую систему"
dd if=/dev/zero of=/tmp/zero bs=512 count=1 # добавочный сектор
cat /tmp/zero /tmp/foo1 > /tmp/foo2 # прилепили сектор к началу
dd if=/tmp/foo2 of=/tmp/foo2 bs=512 skip=1 conv=notrunc # делаем сдвиг
dd if=/dev/null of=/tmp/foo2 bs=512 seek=100 # отрезаем лишний сектор в конце. на реальной партиции его нужно занулить.
diff /tmp/foo1 /tmp/foo2 #файлы идентичны

 Всё получилось

Если всётаки рискну проделать эту операцию на реальной партиции то отпишусь о результатах.

Nao ★★★★★
() автор топика
Ответ на: комментарий от Nao

Success! =)

1) Аккуратненько пересоздал MBR и EBRы с помощью sfdisc
2) сдвинул партицию dd if=/dev/hda6 of=/dev/hda6 bs=512 skip=$offset
3) reiserfsck /dev/hda6 прошёл на ура
4) resize_reiserfs /dev/hda6
5) mount /dev/hda6

вывод - фтопку быдло-проприетарный Акронис. Даёшь sfdisk и dd в каждый дом! :-)

Nao ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.