Если все, что Вы хотите сделать, шпионить за существующим процессом, можно использовать strace -p1234 -s9999 -e write
где 1234 является идентификатором процесса. (-s9999
старается не иметь строки, усеченные к 32 символам, и write
системный вызов, который производит вывод.), Если Вы хотите просмотреть только данные, записанные на конкретном дескрипторе файла, можно использовать что-то как strace -p1234 -e trace= -e write=3
видеть только данные, записанные в дескриптор файла 3 (-e trace=
препятствует тому, чтобы системные вызовы были зарегистрированы). Это не даст Вам вывод, это было уже произведено.
Если вывод прокручивает слишком быстрым, можно передать его по каналу в пейджер такой как less
, или отправьте его в файл с strace -o trace.log …
.
Со многими программами можно отклонить последующий вывод со взломом ptrace, или к текущему терминалу или к новой экранной сессии. Посмотрите, Как я могу отрицать рабочий процесс и связать его к новой экранной оболочке? и другие связанные потоки.
Обратите внимание, что в зависимости от того, как Ваша система настраивается, Вы, возможно, должны выполнить все они strace
команды как корень, даже если процесс работает при Вашем пользователе без дополнительных полномочий. (Если процесс будет работать как другой пользователь или будет setuid или setgid, то необходимо будет работать strace
как корень.) Большинство дистрибутивов только позволяет процессу прослеживать своих детей (это предоставляет умеренное преимущество безопасности — это предотвращает некоторую прямую вредоносную инжекцию, но не предотвращает косвенную инжекцию путем изменения файлов). Этим управляют kernel.yama.ptrace_scome
sysctl.
Выполните эти шаги:
Начальная загрузка в Живую сессию Linux.
Смонтируйтесь /
раздел Вашей установленной ОС к /mnt
sudo mount /dev/sda6 /mnt
Настроенный a chroot
среда:
sudo chroot /mnt
Вы находитесь теперь в "поддельной" установке Linux, которая рассматривает /mnt
как /
. Это означает, что все файлы, необходимые для GRUB, находятся в /boot
где система ожидает, что они будут, и можно установить GRUB так же, как если бы Вы на самом деле выполняли свою установленную систему:
sudo update-grub
sudo grub-install /dev/sda
Теперь перезагрузка и Вы должны видеть, что меню GRUB обычно появляется.
На основе того, что было записано, похоже, что Вы пытаетесь установить GRUB на/dev/sda. Вы не хотите монтировать диск.
Вы, вероятно, ищете: grub-install /dev/sda
Страница справочника GRUB для ссылки, или Вы можете man grub-install
от Вашей системы: http://linux.die.net/man/8/grub-install
Если grub говорит, что не может разрешить канонический путь чего-либо, это означает, что он не существует или realpath()
не удалось.
В этом случае попробуйте:
$ realpath /cow
$ ls -la /cow
Если обе команды говорят «не удается найти файл или каталог», вам необходимо создать его.
Если вторая команда работает, а первая нет, проверьте, почему realpath()
не работает. Одной из причин может быть то, что /proc
не смонтирован. В некоторых реализациях libc /proc/self/fd
используется для получения канонического пути к файлу.
Я тоже получаю эту ошибку, и я не думаю, что это происходит в chroot.
Я думаю, что это происходит, когда systemd не может найти путь, потому что он смонтирован в каталоге. Итак, разница в том, что когда вы настраиваете chroot, вы уже настраиваете доступ к оборудованию, включая диски.
Хотя вы можете настроить этот доступ внутри Systemd, это не означает, что вы можете настроить разрешения для этих дисков таким же образом.
Например, я создал этот файл:
/etc/systemd/system/systemd-nspawn@.service.d/override.conf
И он содержит эти настройки:
[Service]
DeviceAllow=char-usb_device rwm
DeviceAllow=char-usb
[Files]
Bind=/var/cache/apt/pkgcache.bin
Bind=/var/cache/apt/srcpkgcache.bin
Это по-прежнему не работает при использовании grub-install /dev/sda
или update-grub
для USB на Pi с дезагрузкой Debian Stretch. Даже при использовании grub -uboot и grub -efi -arm по-прежнему возникает ошибка grub-probe
не может найти канонический путь.
Не только это, но и то, что update-grub
будет видеть и знать, что такое операционные системы, но, что интересно, grub-install
не распознает операционную систему Debian на USB.
root@raspixmc:/home/pi# grub-install /dev/sda
Installing for arm-uboot platform.
grub-install: warning: no hints available for your platform. Expect
reduced performance.
grub-install: warning: WARNING: no platform-specific install was
performed.
Installation finished. No error reported.
root@raspixmc:/home/pi#
Интересно, когда я создаю chroot и могу запустить update-grub
, даже если я нахожусь в операционной системе, которую я разгрузил на сам USB, он не видит свою собственную операционную систему!
root@raspixmc:/home/pi# mount /dev/sda1 /mnt
root@raspixmc:/home/pi# cd /mnt
root@raspixmc:/mnt# mount --bind /dev dev/
root@raspixmc:/mnt# mount --bind /sys sys/
root@raspixmc:/mnt# mount --bind /proc proc/
root@raspixmc:/mnt# mount --bind /dev/pts dev/pts
root@raspixmc:/mnt# chroot. bin/bash
root@raspixmc:/# update-grub
Generating grub configuration file...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
done
root@raspixmc:/#
Он видит только Raspbian. Это происходит только при попытке установить и обновить GRUB внутри контейнера, но когда я выхожу из chroot.
Посмотрите, как теперь это работает, потому что я не размонтировал каталоги chroot:
/dev dev/
/sys sys/
/proc proc/
/dev/pts dev/pts
Имейте в виду, что за пределами контейнера я запускаю эту команду с grub-uboot
, установленным на Raspbian, и без Grub на USB, содержащем дезагрузочный Debian.
root@raspixmc:/mnt# update-grub
Generating grub configuration file...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
Found Debian GNU/Linux 9 (stretch) on /dev/sda1
done
root@raspixmc:/mnt#
Этого не происходит при использовании одного из неофициально доступных образов для Debian ARM , но очевидно, что это все еще настройка, еще недоступная для дезагрузки.
Действительно бывают случаи, когда лучше просто создать путь.Единственная следующая возможность (и вероятная )— просто написать GRUB. И для этого я просто буду читать на этой странице.
https://www.dedoimedo.com/computers/grub-2.html
Еще одна вещь, которую я хочу рассказать об этой проблеме, — это решение, которое может работать, но учтите, что карты microSD очень чувствительны. Я создавал свои собственные образы Linux и быстро научился этому. Лучше всего использовать Qemu всякий раз, когда вы можете, но чтобы попытаться очистить старую таблицу разделов, вы можете попробовать запустить sgdisk --zap-all
на диске.
sgdisk --zap-all /dev/sdd
На самом деле, иногда, если он выдает ошибку в первый раз, и это не ошибка только чтения -, вы можете запустить его снова, и, наконец, все таблицы разделов будут новыми или старыми.
И вы можете использовать Qemu для эмуляции Raspberry Pi на стандартном ПК на базе AMD/Intel -. Я бы порекомендовал это. Я знаю, что это больше информации, чем относится к исходному сообщению, но я думаю, что, скорее всего, эта ошибка возникла. Это эпоха контейнеров.
Для тех, кто борется с этим, кто пытается использовать живой USB или другие средства chroot для переустановки или установки grub. -Я имел дело с этим несколько раз и забыл задокументировать это раньше, хотя собирался это сделать.
Проблема, с которой вы столкнулись, заключается в том, что grub не имеет доступа к пути, на который вы ссылаетесь, либо в качестве источника (/boot ), либо в качестве места назначения (ваша система и chroot могут видеть, например, /dev/sda
? )или и то, и другое. Когда вы готовитесь к chroot, вы создаете привязки монтирования, которые доступны в среде chroot, или вы делаете это внутри chroot, используя mount -t. В Интернете так много руководств, которые делают это в любом случае.
Вам нужно убедиться, что вы привязываете /dev или только к конкретному разделу (s ), содержащему загрузочные файлы в /boot (, например. /dev/sda1 )./boot — это либо отдельный раздел, либо каталог в /. chroot требуется доступ к диску, на который вы будете (повторно )устанавливать grub, поэтому сделайте fdisk -l в chroot, чтобы убедиться, что вы видите устройство, указанное в выводе. Также обратите внимание, что если у вас нет отдельного загрузочного раздела, но у вас есть загрузочный каталог в /root с загрузочными файлами (, а не просто точка монтирования ), вам нужно монтировать только раздел, содержащий root. Тогда вам не нужно ничего монтировать в /root/boot.
Вам также необходимо убедиться, что вы связываете файловую систему proc и файловую систему sys, но в каждом руководстве, которое я видел, есть эти две. Я только что видел, как /dev иногда пропускал. Могут быть случаи, когда вам это не нужно, но я о них не знаю.
tl;dr :убедитесь, что вы привязали mount /dev
root-device
опция и что Вы ожидаете ту опцию сделать? Вы настроили achroot
среда? Каждый раз, когда Вы задаете вопрос, необходимо объяснить точно, какой t - Вы, пытаются сделать, мы не можем предположить. – terdon♦ 21.10.2013, 17:19--root-directory
также. Пойдите читает мой ответ здесь, который объясняет, как переустановить личинку. – terdon♦ 21.10.2013, 17:34