Очень трудно помочь вам, потому что вы не знаете основных команд... но я попробую, хорошо?
fdisk -l
вы выводите список текущих разделов, как в вашем образе. Когда вы загружаетесь с live cd, вы должны сделать chroot
для доступа к вашей системе, другими словами, операция, которая изменяет видимый корневой каталог для текущего запущенного процесса и его детей. Давайте:
смонтируем вашу систему в /mnt. Помните? Файловую систему Linux? Да. Это /dev/sda10. Итак, выполните команду:
sudo mount /dev/sda10 /mnt
.
Вы используете sudo
, потому что для этого у вас должны быть права администратора.
Итак, смонтируйте временные файловые системы, необходимые для работы программ, с помощью команд:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Вы изменяете загрузку, поэтому вам нужен и раздел /boot. Некоторые системы используют один и тот же раздел для каталога /boot и корня системы (/). Если вы не знаете, какой раздел используется в вашем случае, проверьте, есть ли у вас файлы в папке /mnt/boot/ (там вы найдете образы ядра, конфигурации и т.д.).
- Если папка /mnt/boot пуста, значит, вам нужно смонтировать раздел /boot. Единственный другой раздел, который можно использовать в вашем случае, это /dev/sda1, так что это будет он. Монтируем в /mnt/boot.
- Если вы нашли файлы, то другой раздел /dev/sda1 должен быть действительно файловой системой EFI, и его нужно смонтировать в /mnt/boot/EFI.
Когда все смонтировано, измените корневой каталог, используя:
sudo chroot /mnt /bin/bash
Теперь, внутри chroot, вы можете установить grub:
sudo grub-install /dev/sda
Безымянные области могут быть созданы с помощью достаточно большого malloc
:
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int *ip;
char *before, *after;
asprintf(&before, "cat /proc/%d/smaps > before", getpid());
asprintf(&after, "cat /proc/%d/smaps > after", getpid());
system(before);
ip = malloc(9999999);
if (!ip) abort();
system(after);
return 0;
}
Как показано
$ CFLAGS=-g make ilikebigmallocs
cc -g ilikebigmallocs.c -o ilikebigmallocs
$ ./ilikebigmallocs
$ diff before after
64a65,80
> 7f97425ac000-7f9742f36000 rw-p 00000000 00:00 0
> Size: 9768 kB
> Rss: 4 kB
...
, по крайней мере, некоторые из ваших областей были созданы malloc
или аналогичный (который под капотом вызывает mmap
). strace
(или sysdig
) может регистрировать следующее:
$ strace -e trace=memory -o blah ./ilikebigmallocs
$ awk '/^mmap/{print $NF}' blah
0x7fc6193b1000
0x7fc6193a6000
...
$ grep 7fc6193b1000 after
7fc6193b1000-7fc6193b2000 rw-p 00000000 00:00 0
$
Я думаю, вы могли бы использовать gdb
или трассировщик malloc или другие средства для разрешения конкретной mmap
создайте резервную копию определенного кода в вашем требовательном к памяти процессе...