Как считать в оперативной памяти (ядро) таблица разделов/dev/sda?

На последних версиях удара можно включить globstar (shopt -s globstar), и затем сделайте:

cd /tmp/backup
tar cvf - **/*.php | tar xvf - -C /home/mysite/public_html

** соответствия все файлы, директора и subdirs

Я использую tar здесь, потому что это сохраняет структуру каталогов.

14
13.04.2017, 15:22
3 ответа

Да, можно сделать это с /sys файловая система.

/sys поддельная файловая система, динамично сгенерированная ядром и драйверами ядра.
В этом конкретном случае можно перейти в /sys/block/sda и Вы будете видеть каталог для каждого раздела на диске. Существует 2 определенных файла в тех папках, в которых Вы нуждаетесь, start и size. start содержит смещение с начала диска, и size размер раздела. Просто удалите разделы и воссоздайте их с тем же самым, запускается и размеры, как найдено в /sys.

Например, это - то, на что похож мой диск:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      133119       65536   83  Linux
/dev/sda2   *      133120   134340607    67103744    7  HPFS/NTFS/exFAT
/dev/sda3       134340608   974675967   420167680   8e  Linux LVM
/dev/sda4       974675968   976773167     1048600   82  Linux swap / Solaris

И это - то, в чем я имею /sys/block/sda:

sda1/
 start: 2048
 size: 131072
sda2/
 start: 133120
 size: 134207488
sda3/
 start: 134340608
 size: 840335360
sda4/
 start: 974675968
 size: 2097200


Я протестировал это, чтобы проверить, что информация является достоверной после изменения таблицы разделов в рабочей системе

25
27.01.2020, 19:50
  • 1
    Иногда, когда я upvote вопрос, это означает "эй, что это было удобно". Ваш upvote больше похож, "это сохранило мою кожу".Спасибо! –  Alex Hirzel 29.10.2015, 02:59
  • 2
    у меня нет a /dev/sdb/start. Это было переименовано к ext_range? Ядро: 4.8.15-1-MANJARO –  Tom Hale 18.01.2017, 04:10
  • 3
    @TomHale это /sys/block/sdb/start, нет /dev/sdb/start –  Patrick 18.01.2017, 15:24
  • 4
    Извините, я заключил неправильный каталог в кавычки. У меня есть a stat там, но нет start. –  Tom Hale 20.01.2017, 08:54
  • 5
    При воссоздании разделов я рекомендую usind fdisk поскольку это позволяет вводить номер секторов непосредственно, и Вы можете контрольные числа прежде, чем записать в диск. Я успешно восстановил диск: создание первого раздела, принимая быть, затем входя "+size" (сверху) для конца, второго ввода раздела start от/sys... и "+size" снова и так далее... Проверьте размер разделов прежде, чем записать новую таблицу.Удачи! –  Jörg Gottschlich 28.08.2017, 10:39

Вы попробовали испытательный стенд? Это может просканировать диск и восстановить потерянные таблицы разделов, даже после перезагрузки.

Это доступно предварительно упакованный для Debian и по-видимому для Ubuntu также. Вероятно, другие дистрибутивы.

При начальной загрузке gparted CD, это, вероятно, стоит проверить, чтобы видеть, предварительно установлено ли это на этом.

3
27.01.2020, 19:50
  • 1
    Да, он сделал. Просто проверьте ссылку OP (askUbuntu) –  Marco 25.07.2012, 15:53

Я сделал сценарий, чтобы помочь решить эту проблему без ГАРАНТИИ. (но я протестировал на своей виртуальной машине),

Запущение следующего скрипта, с поврежденным HD в первом параметре: $./repart.sh sda

#!/bin/bash

HARDDISK=$1

PARTITIONS=$(ls -d /sys/block/${HARDDISK}/${HARDDISK}?/)

echo "unit: sectors" 
for i in $PARTITIONS; do
    DEVICE=$(basename $i)
    START=$(cat $i/start)
    SIZE=$(cat $i/size)
    echo "/dev/$DEVICE : start=$START, size=$SIZE, type=XX" 
done

Вывод является sfdisk форматом. Но осторожность, этот файл должен быть изменен, чтобы использоваться. При расширенном разделе type=5, увеличьте размер, использовав все логическое пространство плюс пространство между запуском расширенных и запуститесь первого логического раздела.

unit: sectors
/dev/sda1 : start=63, size=2040192, type=XX
/dev/sda2 : start=2040255, size=20482875, type=XX
/dev/sda3 : start=22523130, size=19197675, type=XX
/dev/sda4 : start=41720805, size=2, type=XX
/dev/sda5 : start=41720868, size=208782, type=XX

Необходимо изменить тип, от XX до количества типа раздела. Поместите загрузочный раздел в первую строку.

unit: sectors
/dev/sda1 : start=63, size=2040192, type=83, bootable
/dev/sda2 : start=2040255, size=20482875, type=83
/dev/sda3 : start=22523130, size=19197675, type=fd
/dev/sda4 : start=41720805, size=208845, type=5
/dev/sda5 : start=41720868, size=208782, type=82

Подайте заявку это изменяется

cat repart.sfdisk | sfdisk -f /dev/sda

Перечитайте таблицы разделов

partprobe 
/sbin/blockdev --rereadpt

Переустановите личинку

grub-install /dev/sda
10
27.01.2020, 19:50
  • 1
    Удостоверьтесь, что использовали "-u B" переключатель для sfdisk и были осторожны, Вам, возможно, придется корректироваться, значения в repart.sfdisk (разделите их на два обычно), если sfdisk рассчитывает в размерах блоков (проверка на "Единицы = блоки 1 024 байтов" в "sudo sfdisk-u B-l/dev/sda") кроме 512 байтов (обычно 1024 в наше время). –  Florian 31.07.2014, 12:17
  • 2
    я неправильно читал сначала: Id=5 Вы имеете в виду тип 5 раздела, который является sda4, не sda5. Кроме того, в моем случае ls-d/sys/block/sda/sda* дает мне только sda1 и sda5, таким образом, кажется, что контейнер отсутствует. ре –  wau 07.10.2015, 22:25
  • 3
    Вы не должны анализировать ls; используйте находят вместо этого –  cat 01.06.2017, 13:04

Теги

Похожие вопросы