LINUX.ORG.RU

Собираю Gentoo, ошибка монтирования раздела

 , , ,


1

1

Собственно, сабж. Собираю из под рабочего Арча на отдельный раздел sda7, который размечен под два подтома - root и home. Пользуюсь рекомендациями из этой статьи. Это отлично работало при установке Арча и предыдущей установке Gentoo, но в этот раз что-то пошло не так. Пока я собирал систему из-под chroot-а, всё монтировалось правильно, после перезагрузки Генту не грузится, поясняя это возгласом http://itmages.ru/image/view/4996187/75bb41e0. Перезагрузившись в Арч, я обнаружил, что оба подтома на sda7 определились как отдельные каталоги, т. е. в корне раздела 2 каталога - home и root.

Содержимое /etc/fstab:

/dev/sda7               /               btrfs           subvol=root,compress=lzo,autodefrag,space_cache         0 1

/dev/sda7               /home           btrfs           subvol=home,compress=lzo,autodefrag,space_cache         0 0

/dev/sda5               none            swap            defaults                                                0 0

/dev/sda6               /arsenal        ext4            defaults                                                0 0

Ядро 4.8 с kernel.org с наложенными вручную pf-патчами, поддержка btrfs включена в ядро. SystemD.

ЧЯДНТ?

★★★★★

Последнее исправление: meliafaro (всего исправлений: 2)

монтировать по UUID в fstab

NyXzOr ★★★
()

Ну вообще тома Btrfs система воспринимает как простые каталоги. А что в загрузчике?

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

В загрузчике, в смысле, в grub.cfg?

        menuentry 'Gentoo GNU/Linux, с Linux 4.8.0-pf1' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-pf1-advanced-90da3a$
                load_video
                if [ "x$grub_platform" = xefi ]; then
                        set gfxpayload=keep
                fi
                insmod gzio
                insmod part_msdos
                insmod btrfs
                set root='hd0,msdos7'
                if [ x$feature_platform_search_hint = xy ]; then
                  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7  90da3acb-0f99-4995-ad30-e0c861e65d$
                else
                  search --no-floppy --fs-uuid --set=root 90da3acb-0f99-4995-ad30-e0c861e65d09
                fi
                echo    'Загружается Linux 4.8.0-pf1 …'
                linux   /root/boot/vmlinuz-4.8.0-pf1 root=UUID=90da3acb-0f99-4995-ad30-e0c861e65d09 ro rootflags=subvol=root init=/usr/lib/systemd/systemd
                echo    'Загружается начальный виртуальный диск …'
                initrd  /root/boot/initramfs-genkernel-x86_64-4.8.0-pf1

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

Видимо, установщик груба взял UUID не того раздела. Замените UUID на /dev/sda7 прямо в конфиге и попробуйте загрузить.

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

Не помогает. Быстро пробегает сообщения, дескать, загрузился vmlinuz и initramfs, ещё пару секунд что-то активно грузится, потом вылетает та же ошибка.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от NyXzOr

Поменял на uuid, убрал проверку, не помогает.

meliafaro ★★★★★
() автор топика

Пересоберу-ка я ядро, со стандартным гентушным всё ок было. Чем чёрт не шутит.

meliafaro ★★★★★
() автор топика

Дело в том, что опции во fstab для корневой ФС учитываются не полностью. Происходит это потому, что первоначально корневая ФС монтируется из initramfs с дефолтными флагами (или теми, которые ты укажешь в параметре ядра rootflags=), а уже после запуска основного init она перемонтируется с нужными флагами.

Следовательно, имя правильного subvolume должно быть известно ещё на этапе выполнения initramfs. Добиться этого есть два способа:

  1. Указать rootflags=subvol=root,compress=lzo,autodefrag,space_cache в параметрах ядра.

    Как это сделать — зависит от загрузчика. В случае GRUB2 нужно отредактировать /etc/default/grub (название конкретного параметра не помню, но оно самоочевидно) и перегенерировать конфиг GRUB2 командой grub-mkconfig.

  2. Установить подтом по умолчанию. Из другой ОС, если предположить, что твой раздел подмонтирован в /mnt/target, это будет выглядеть так:
    btrfs subvolume list /mnt/target
    <запоминаем число ID напротив root>
    btrfs subvolume set-default <запомненное число> /mnt/target
    
intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Во втором случае есть вероятность, что не подмонтируется подтом home, т. к. имена подтомов, возможно, отсчитываются от подтома по умолчанию, а не от корня раздела. Тогда придётся переместить подтом home внутрь подтома root (как обычный каталог, предварительно примонтировав куда-нибудь корень ФС с помощью опции subvol=5).

intelfx ★★★★★
()
Ответ на: комментарий от BattleCoder
# Configuration file for genkernel

# This file is sourced by genkernel at startup and determines which options
# we will be using to compile our kernel.  The order of precidence is simple,
# with the internal settings being least important, configuration file
# settings next, and command line options being most important.

# =========Common Command Line Option Defaults=========

# Should we install to $BOOTDIR?  Default is "no" because genkernel is used in
# catalyst and stage building.
INSTALL="yes"

# Run 'make oldconfig' before compiling this kernel?
OLDCONFIG="no"

# Run 'make menuconfig' before compiling this kernel?
MENUCONFIG="no"

# Run 'make nconfig' (ncurses 'menuconfig') before compiling this kernel?
NCONFIG="no"

# Note, that two previous lines are mutual exclusive (logically), while
# MENUCONFIG has a higher priority if both them is enabled.

# Run 'make clean' before compilation?
# If set to NO, implies MRPROPER WILL NOT be run
# Also, if clean is NO, it won't copy over any configuration
# file, it will use what's there.
CLEAN="no"

# Run 'make mrproper' before configuration/compilation?
MRPROPER="no"

# Override the arch detection?
#ARCH_OVERRIDE="x86"

# Mount BOOTDIR automatically if it isn't mounted?
MOUNTBOOT="no"

# Make symlinks in BOOTDIR automatically?
#SYMLINK="no"

# Save the new configuration in /etc/kernels upon
# successfull compilation
SAVE_CONFIG="yes"

# Use Color output in Genkernel?
USECOLOR="yes"

# Clear build cache dir
#CLEAR_CACHE_DIR="yes"

# Clear all tmp files and caches after genkernel has run
#POSTCLEAR="1"

# Genkernel uses an independent configuration for MAKEOPTS, and does not source
# /etc/make.conf . You can override the default setting by uncommenting and
# tweaking the following line. Default setting is set up by
# ${GK_SHARE}/${ARCH_OVERRIDE}/config.sh . The recommended value for -j
# argument is: <number of processors>*<number of cores per processor>+1
MAKEOPTS="-j3"

# Add in LVM support from static binaries if they exist on the system, or
# compile static LVM binaries if static ones do not exist.
LVM="no"

# Add in Luks support. Needs sys-fs/cryptsetup with -dynamic installed.
#LUKS="no"

# Add in GnuPG support
#GPG="no"

# Add DMRAID support.
#DMRAID="no"

# Include (or suppresses the inclusion of) busybox in the initrd or initramfs.
# If included, busybox is rebuilt if the cached copy is out of date.
#BUSYBOX="yes"

# Use udev instead of mdev as the default device manager for the initramfs.
# If you use systemd and perhaps lvm, you _must_ keep this turned on.
UDEV="yes"

# Includes mdadm/mdmon binaries in initramfs.
# Without sys-fs/mdadm[static] installed, this will build a static mdadm.
#MDADM="no"

# Specify a custom mdadm.conf.
# By default the ramdisk will be built *without* an mdadm.conf and will auto-detect
# arrays during bootup.  Usually, this should not be needed.
#MDADM_CONFIG="/etc/mdadm.conf"

# Add Multipath support.
#MULTIPATH="no"

# Add iSCSI support.
#ISCSI="no"

# Add e2fsprogs support.
#E2FSPROGS="no"

# Enable copying of firmware into initramfs
FIRMWARE="yes"
# Specify directory to pull from
FIRMWARE_DIR="/lib/firmware"
# Specify specific firmware files to include. This overrides FIRMWARE_DIR
FIRMWARE_FILES=""

# Add new kernel to grub?
BOOTLOADER="grub"

# Enable splashutils in early space (initrd). Default is "no".
SPLASH="yes"

# Use this splash theme. If commented out - the "default" name theme is used.
# Also, SPLASH="yes" needs to be enabled for this one to one work.
# This supersedes the "SPLASH_THEME" option of /etc/conf.d/splash (in early space).
SPLASH_THEME="gentoo"

# Installs, or not, plymouth into the initramfs. If "splash" will be
# passed at boot, plymouth will be activated.
PLYMOUTH="yes"

# Embeds the given plymouth theme into the initramfs.
# PLYMOUTH_THEME="text"

# =========Keymap Settings=========
#
# Force keymap selection at boot
#DOKEYMAPAUTO="yes"


# Disables keymap selection support
#KEYMAP="0"


# =========Low Level Compile Settings=========
#
# GNU Make to use for kernel.  See also the --kernel-make command line option.
#KERNEL_MAKE="make"

# Compiler to use for the kernel (e.g. distcc).  See also the --kernel-cc
# command line option.
#KERNEL_CC="gcc"

# Assembler to use for the kernel.  See also the --kernel-as command line
# option.
#KERNEL_AS="as"

# Linker to use for the kernel.  See also the --kernel-ld command line option.
#KERNEL_LD="ld"

# GNU Make to use for the utilities.  See also the --utils-make command line
# option.
#UTILS_MAKE="make"

# Compiler to use for the utilities (e.g. distcc).  See also the --utils-cc
# command line option.
#UTILS_CC="gcc"

# Assembler to use for the utilities.  See also the --utils-as command line
# option.
#UTILS_AS="as"

# Linker to use for the utilities.  See also the --utils-ld command line
# option.
#UTILS_LD="ld"

# =========GENKERNEL LOCATION CONFIGURATION============
# Variables:
#   %%ARCH%%  - Final determined architecture
#   %%CACHE%% - Final determined cache location

# Set genkernel's temporary work directory.  Default is /var/tmp/genkernel
#TMPDIR="/var/tmp/genkernel"

# Set the boot directory, default is /boot
BOOTDIR="/boot"

# Default share directory location
GK_SHARE="${GK_SHARE:-/usr/share/genkernel}"

# Location of the default cache
CACHE_DIR="/var/cache/genkernel"
# Location of DISTDIR, where our source tarballs are stored
DISTDIR="/var/lib/genkernel/src"
# Log output file
LOGFILE="/var/log/genkernel.log"
# Debug Level
LOGLEVEL=1

# =========COMPILED UTILS CONFIGURATION============
#
# Default location of kernel source
DEFAULT_KERNEL_SOURCE="/usr/src/linux"
# Default kernel config (only use to override using
# arch/%%ARCH%%/kernel-config-${VER}.${PAT} !)
#DEFAULT_KERNEL_CONFIG="${GK_SHARE}/arch/%%ARCH%%/kernel-config"

# Specifies a user created busybox config
#BUSYBOX_CONFIG="/path/to/file"
#BUSYBOX_APPLETS="[ ash sh mount uname echo cut cat"

# NOTE: Since genkernel 3.4.41 the version of
#   busybox, lvm, mdadm, .. have been moved to
#   /usr/share/genkernel/defaults/software.sh in order to
#   reduce the merging you have to do during etc-update.
#   You can still override these settings in here.


# =========MISC KERNEL CONFIGURATION============
#
# Tag the kernel and ramdisk with a name:
# If not defined the option defaults to
# 'genkernel'
#KNAME="genkernel"


# This option is only valid if kerncache is
# defined. If there is a valid kerncache no checks
# will be made against a kernel source tree
#KERNEL_SOURCES="0"


# Build a static (monolithic kernel)
#BUILD_STATIC="1"


# Make and install kernelz image (PowerPC)
#GENZIMAGE="1"


# File to output a .tar.bz2'd kernel contents
# of /lib/modules/ and the kernel config
# NOTE: This is created before the callbacks
# are run!
#KERNCACHE="/path/to/file"


# Prefix to kernel module destination, modules
# will be installed in <prefix>/lib/modules
# (.conf equivalent of --module-prefix=<dir>)
#INSTALL_MOD_PATH=""


# =========MISC INITRD CONFIGURATION============
#
# Copy all kernel modules to the ramdisk
#ALLRAMDISKMODULES="1"


# Don't copy any modules to the ramdisk
#RAMDISKMODULES="0"


# File to output a .tar.bz2'd kernel and ramdisk:
# No modules outside of the ramdisk will be
# included...
#MINKERNPACKAGE="/path/to/file.bz2"


# File to output a .tar.bz2'd modules after the
# callbacks have run
#MODULESPACKAGE="/path/to/file.bz2"


# Directory structure to include in the initramfs,
# only available on >=2.6 kernels
#INITRAMFS_OVERLAY=""


# Build the generated initramfs into the kernel instead of
# keeping it as a separate file
#INTEGRATED_INITRAMFS="1"


# Compress generated initramfs
#COMPRESS_INITRD="yes"
# Types of compression: best, xz, lzma, bzip2, gzip, lzop, fastest
# "best" selects the best available compression method
# "fastest" selects the fastest available compression method
#COMPRESS_INITRD_TYPE="best"


# Create a self-contained env in the initramfs
#NETBOOT="1"


# =========MISC BOOT CONFIGURATION============
#
# Specify a default for real_root=
#REAL_ROOT="/dev/one/two/gentoo"

Но я собирал только initramfs с помощью genkernel, всё остальное с make.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Не помогает( Даже Арчик нормально всё увидел, Гента ни в какую. Видимо, что-то я с ядром намудрил.

meliafaro ★★★★★
() автор топика

В общем, это, по видимому, глюк genkernel-а. Попробовал использовать dracut, всё запустилось. Но тогда уже встают вопросы к этому dracut - для какого конкретно ядра linux он делает образ, откуда берёт информацию? Как сделать нужный образ, если у меня, допустим, ядро vmlinuz-9999-zver-edition+100500-patchset и это далеко не единственное ядро в системе?

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

Почитай Gentoo wiki на предмет корня на btrfs. Второе, что бы можно было указывать корень через UUID нужно, что бы Initramfs, собранный Genkernel был собран с опцией disklabel,

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

Это я сделал первым делом. Пока ясности не наступило, иначе я бы здесь и не спрашивал.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от kostik87

В genkernel-next нет этого ключа, а, возможно, и во всех современных версиях генкернела. В мане этого ключа нет. Впрочем, я решил проблему, установив ядро вручную и собрав initramfs с помощью dracut. Теперь ещё бы с этим dracut разобраться.

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

что плохого в ванильном ядре и васянских патчах?

Очевидный фикс

anonymous
()

какой только херней люди не маются, лишь бы не пользоваться nixos

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

На это могут быть какие угодно причины. Мне важны в данном случае BFS и BFQ для работы с аудио при низких задержках. Для того, чтобы не возиться со всеми патчами по отдельности, решил установить pf-сет, который уже включает эти и некоторые другие патчи.

К слову, к моей проблеме, как оказалось, эти патчи не имеют отношения.

meliafaro ★★★★★
() автор топика

В любом случае, проблема решена пересборкой initramfs с помощью dracut вместо genkernel. Помечаю, как решенную.

meliafaro ★★★★★
() автор топика

Регаться лень. К вашему вопросу приклеюсь.

Делаю так: grep USE /etc/portage/make.conf USE=«${USE} -selinux -bluetooth -gtk -llvm -handbook -sftp» USE=«${USE} postgres lm_sensors gpg pulseaudio ffmpeg gstreamer»

cat /etc/portage/package.use/use app-arch/unzip natspec app-arch/zip natspec media-libs/freetype fontforge dev-qt/qtsql -sqlite -mysql app-arch/libarchive lz4 lzo media-libs/phonon -vlc app-office/libreoffice -vlc dev-libs/leveldb -tcmalloc kde-plasma/kwin multimedia dev-qt/qtwebkit multimedia dev-qt/qtmultimedia gstreamer

Вываливается с таким текстом:

Calculating dependencies ... done!

!!! The ebuild selected to satisfy «>=dev-qt/qtwebkit-5.6.1:5» has unmet requirements. - dev-qt/qtwebkit-5.6.1::gentoo USE=«gstreamer jit multimedia opengl qml -debug -geolocation -gstreamer010 -orientation -printsupport -test -webchannel -webp» ABI_X86=«64»

The following REQUIRED_USE flag constraints are unsatisfied: at-most-one-of ( gstreamer gstreamer010 multimedia )

(dependency required by «kde-plasma/libksysguard-5.7.5::gentoo[detailedmemory]» [ebuild]) (dependency required by «kde-plasma/plasma-workspace-5.7.5::gentoo» [ebuild]) (dependency required by «kde-plasma/plasma-desktop-5.7.5::gentoo» [ebuild]) (dependency required by «kde-plasma/plasma-desktop» [argument])

Что-то устал за день. Может кто подскажет, как разрулить зависимости? Разрулить самостоятельно конечно смогу, но на это время нужно и отдых.

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

The following REQUIRED_USE flag constraints are unsatisfied: at-most-one-of ( gstreamer gstreamer010 multimedia )

Конфликтуют USE-флаги, нужно выбрать один из

gstreamer gstreamer010 multimedia

Просто заминусуй два из этих трех флагов в /etc/portage/package.use.

Например:

echo ">=dev-qt/qtwebkit-5.6.1:5 -gstreamer010 -multimedia" >> /etc/portage/package.use

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