LINUX.ORG.RU
ФорумAdmin

удалил root


0

1

Сегодня запорол linux:
dd if=q.hdd of=/dev/sda bs=1M
^c
Ошибся с «a», хотел «b» , недоспал, хоть ^c быстро нажал )
Ладно, с кем не бывает, восстанавливаем /dev/sda1, он же /

1. Не ребутимся , восстанавливаем partitions из текущего ядра
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 103216948 5319200 92654536 6% /
none 1473104 704 1472400 1% /dev
none 1479712 1792 1477920 1% /dev/shm
none 1479712 396 1479316 1% /var/run
none 1479712 0 1479712 0% /var/lock
/dev/sda4 384102412 142723212 221867856 40% /home
/dev/sda3 103216948 18088988 79884748 19% /media/c7a36769-c60d-46b6-89f2-f584af11c36a
Компилируем:
<code>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/hdreg.h>
int main(int ac,char *av[])
{
  char *dev = av[1];
  if(!dev) printf(«usage: hget dev ...\n»),exit(1);
  for(int i=1;i<ac;i++)
  {
    dev=av[i];
    struct hd_geometry g;
    int fd = open(dev,O_RDONLY);
    if(fd==-1) perror(dev),exit(1);
    if(ioctl(fd,HDIO_GETGEO, &g)==-1) perror(dev),close(fd),exit(1);
    uint u = g.heads * g.sectors;
    printf(«%s: heads=%d sectors=%d cylinders=%d start=%lu start/%d+1=%f\n»,dev,g.heads,g.sectors,g.cylinders,g.start,u,1.+(u?(1.0*g.start)/u:0.));
    close(fd);
  }
  return 0;
}
</code>
cat at /proc/partitions
hget /dev/sda*
/dev/sda: heads=255 sectors=63 cylinders=65535 start=0 start/16065+1=1.000000
/dev/sda1: heads=255 sectors=63 cylinders=65535 start=16065 start/16065+1=2.000000
/dev/sda2: heads=255 sectors=63 cylinders=65535 start=209744640 start/16065+1=13057.000000
/dev/sda3: heads=255 sectors=63 cylinders=65535 start=260076285 start/16065+1=16190.000000
/dev/sda4: heads=255 sectors=63 cylinders=65535 start=469804860 start/16065+1=29245.000000
fdisk /dev/sda
Смотрим на последнюю цифирь этой програмки и пишем цилиндры
Надо на будущее гдето хранить «fdisk -l /dev/sda»:
/dev/sda1               2       13056   104864287+  83  Linux
/dev/sda2           13057       16189    25165822+  82  Linux swap / Solaris
/dev/sda3           16190       29244   104864287+  83  Linux
/dev/sda4           29245       77825   390226882+  83  Linux
сat /proc/partitions и сличаем
   8        0  625131864 sda
   8        1  104864287 sda1
   8        2   25165822 sda2
   8        3  104864287 sda3
   8        4  390226882 sda4
Если нецелое то думаем )
/dev/sda1: heads=255 sectors=63 cylinders=14593 start=63 start/16065+1=1.003922
gpart не дождался ...
2. cd /home/save
cp -a /etc etc
dpkg -l |print2 >pkg.list
cp -a /var/cache/apt-cacher/ apt-cacher
find / -mount |sort >ROOT.LIST

3. update-grub; grub-install /dev/sda; reboot
and restore root ...

4. сравниваем ROOT.LIST





Клево :) на все руки от скуки.. У меня конечно не такой левел, это уже виртуозно, но я тоже наверное выкрутился бы - акронис disk director, восстановление разделов творят чудеса :)

PATRI0T
()

Надо на будущее где-то хранить «fdisk -l /dev/sda»

Надо на будущее где-то хранить «fdisk -lu /dev/sda»

Я так делаю уже лет пять, причём храню именно в секторах, эти CHS никакого толку не несут уже. Имея стартовые сектора разделов и их количество можно в 0-ой сектор смело вписывать таблицу, я уже несколько раз писал на форуме куда и как это делать, да и самому можно разобраться - это несложно.
Делаю так после того, как поимел полезный опыт восстановления таблицы разделов дома. Потом не раз это же делал знакомым после похожих завтыков и случайных слётов 0-го сектора с проблемой «ничего не делали - пропал раздел». Никаких Testdisk и Акронисов. Hexedit+dd.

Но правда у меня и бинарный бэкап имеется от 0 сектора до начала раздела. И самих разделов. И у знакомых забираю. Авось пригодится :)

adriano32 ★★★
()

была подобная хрень, но я не настолько виртуозен. плюс - у меня первым был /boot раздел, так что я запорол только ядро(записалось порядка 85-100 мегабайт, пока не прервал). Так что testdisk + перекомпиляция ядра меня спасли

Pinkbyte ★★★★★
()

А где этап переустановки пакетов?

И зачем нужна сишная программа? Таблицу же разделов можно считать с запущенной системы.

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

<на все руки от скуки..

Мне вспоминаеца, как один начинающий автолюбитель (но опытный электрик, ага ;)) хитро шунтировал реле указателя поворота (включая в параллель заведомо исправные элементы), ради поиска неисправности в цепи... (Изоленты в проводке было больше чем изоляции, спасибо монтажникам сигнализации. Очень ему рвали шаблон поворотники, которые прекрасно работали с аварийкой и никак не воспринимали собственно переключатель поворотников) А страшная разгадка таилась в мануале к транспортному стредству: невключенное зажигание. В итоге - развинченная рулевая колонка, неделя бдений над схемой электрооборудования, замененный переключатель, посаженный аккумулятор... И все из-за забытого зажигания. В плюсе только пофиксенный звуковой сигнал (прежние владельцы тачки в погоне за деревянными понтами оборвали проводку и смяли токопроводящее кольцо.)

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

С

3+. А где взять цилиндры стандартно?
gpart я не дождался но и не надо
пакеты: apt-get install `cat pkg.list`
Хоть не качать с инета с установленным apt-cacher
ps: хотя есть проблемы с этим apt-cacher

kdev
() автор топика
Ответ на: С от kdev

А зачем цилиндры? Из /proc/partitions берём размеры в блоках. Дальше руками fdisk задаёшь размеры разделов в тех же блоках. Или sfdisk /dev/sda | sfdisk /dev/sda чтобы перезаписать её.

Правда, sfdisk часть gparted, может он тоже не заработает...

true_admin ★★★★★
()
Ответ на: С от kdev

>А где взять цилиндры

Привет, как оно там, в вашем 1990м году?

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

1990
эх в 1990 ... )

Цилидры не надо но думает fdisk и bios в них

kdev
() автор топика

Чё за фиготнь:

char *dev = av[1];
  if(!dev) printf("usage: hget dev ...\n"),exit(1);

Проверяйте значение ac, не учите детей плохому!

anonymous
()
Ответ на: С от kdev

apt-get install `cat pkg.list`

а он не поставит пакет если не будет для него обновления. Помню где-то видел рецепт переустановить только повреждённые пакеты. Щас сходу нашёл только ключ --reinstall у apt-get.

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