Итак, как решение;
Предыстория :Я использую Arch Linux. Он использует mkinitcpio для генерации своих initramfs (и раннего пользовательского пространства (! )). Поскольку мы загружаем образ файловой системы из NTFS, нам нужно настроить initramfs. Мы можем использовать GRUB и его модуль ntfs для чтения (NTFS-модуль GRUB является ro afaik. )ядро и initramfs из раздела NTFS. После этого нам все еще нужно смонтировать раздел NTFS из initramfs для полного доступа для чтения/записи.
Теория работы решения :Я добавил пакеты ntfs -3g и fusefs в initramfs, чтобы можно было смонтировать раздел NTFS. Я также создал новый хук mkinitcpio , который нужно загрузить перед фактическим монтажным хуком. Хук представляет собой простой сценарий оболочки, который получает параметры (, которые задаются как аргументы ядра из GRUB ), например
.
menuentry "Boot LINUX FROM ISO FILE" {
insmod ntfs
set root='(hdX,Y)'
linux /in_ntfs/vmlinuz-linux root=UUID=*GPT_UUID_OF_ROOTFS_ON_DISK_IMAGE* image_path=*path_to_disk_image_on_NTFS* image_hd=*GPT_UUID_OF_NTFS_DISK*
initrd /in_ntfs/initrd.img
}
Процедура загрузки при монтировании дисков:
Вksh93
:
$ var=staaacksoveerfloow
$ print -r -- "${var//@(?)+(\1)/\1}"
stacksoverflow
(замените ?
на [[:alpha:]]
/ [[:lower:]]
... если вы хотите ограничить дедупликацию только некоторым классом символов ).
Вzsh
:
$ autoload -Uz regexp-replace
$ set -o rematchpcre
$ var=staaacksoveerfloow
$ regexp-replace var '(.)\1+' '$match[1]'
$ print -r -- $var
stacksoverflow
Снова замените .
на [[:alpha:]]
/[[:lower:]]
(классы символов POSIX )или свойства PCRE (, такие как \p{Latin}
, чтобы ограничить буквы в латинском сценарии (, используемом в Английский ), например ), или \w
... Подробнее см. man pcrepattern
.