LINUX.ORG.RU

Сообщения Janis

 

fdisk некорректно определяет размер диска, который есть в fstab

Приветствую!

Есть ось: Debian 10 с ядром 5.10.0.

Есть задача: написать сервис, который будет отрабатывать до монтирования диска из fstab. Сервис должен создавать GPT и один раздел, если диск имеет некорректное кол-во разделов.

Собственно, задачка простенькая. Скрипт написан и протестирован, сервис, дергающий данный скрипт, тоже.

Код сервиса:

[Unit]
Description=Archive disk checker & repairer 
Before=archive.mount

[Service]
ExecStart=/opt/bin/archive-checker-repairer.sh
Type=oneshot

[Install]
WantedBy=multi-user.target

Код скрипта:

#!/bin/bash

DISK="/dev/sda"

PARTITIONS_COUNT=$(grep -c '^sda(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' /proc/partitions)
if [ "$PARTITIONS_COUNT" -ne "1" ]; then
    
    echo "The $DISK is not ready to be used as an archive disk Format the $DISK..."
    ( dd if=/dev/zero of=$DISK bs=512 count=1 ) > /dev/null 2>&1
    if [ $? != 0 ]; then
        echo "An attempt to format the $DISK failed!"     
        exit 1
    fi
    
    echo "Create new GPT table and partition..."
    (
      echo g; # Создать GPT таблицу 
      echo n; # Создать новый раздел
      echo 1; # Задать номер раздела
      echo ;  # Задать начальный размер раздела
      echo ;  # Задать конечный размер раздела 
      echo y; # Подтвердить удаление сигнатуры диска (Если ее нет, то эта команда ничего не сделает)
      echo w; # Записать изменения на диск
    ) | ( fdisk $DISK ) > /dev/null 2>&1
    if [ $? != 0 ]; then
        echo "An attempt to create new GPT table and partition on $DISK failed!"     
        exit 2
    fi    
    
    echo "The $DISK was successfully formatted!"
fi

echo "The $DISK is ready to be used as an archive disk!"

exit 0

Строка подключения диска из fstab:

/dev/sda1 /archive ext4 defaults 0 0

При заливке на сервак происходит веселье: fdisk (через который скрипт и выполняет создание GPT и раздела) выдает вот такой перл:

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xfde7c68f.

Command (m for help): g
Created a new GPT disklabel (GUID: EB2D38CB-097B-B648-9A75-10FC948DA4FF).

Command (m for help): n
Partition number (1-128, default 1): 
First sector (34-18446744073709551583, default 34): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (34-18446744073709551583, default 18446744073709551583): 

Created a new partition 1 of type 'Linux filesystem' and of size 16 EiB.

Command (m for help): w
fdisk: failed to write disklabel: Invalid argument

Почему то, если диск есть в fstab, то fdisk определяет его размер как 16 эксибибайт. Если диск в fstab отсутствует, то его выхлоп следующий:

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognised partition table.
Created a new DOS disklabel with disk identifier 0xe3e8e6bf.

Command (m for help): g
Created a new GPT disklabel (GUID: D47014B4-09D4-4A42-8520-ABC3FE2123DC).

Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-2000409230, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2000409230, default 2000409230): 

Created a new partition 1 of type 'Linux filesystem' and of size 953.9 GiB.

Command (m for help): w

Для чистоты эксперимента я распаковал 4 новых одинаковых диска и со всеми ними ситуация идентична.

Есть идеи, почему такое вообще может возникать?

Ответ

Благодарю за помощь. Как оказалось, проблема была не в dd и не в fdisk, а в fstab. Почему то, что parted, что fdisk выдавали ошибки, когда маунт диска был в fstab. Теперь там его нет, но он есть в конце скрипта. Ну и сервис теперь стартует до программы, который нужен архивный диск. Печально, конечно. Не ожидал от fstab’а такой подставы)

Ответ Update

В один прекрасный перезапуск вылезла та же проблема. Закопался в сервисы поглубже и вот что выяснил: проблема возникала из-за того, что мой сервис стартовал до завершения multi-user.target, который является индикатором того, что система готова к использованию. Собственно, если в файле сервиса прописать After=multi-user.target, то проблема решается.

 , , , ,

Janis
()

Не работает ввод с клавиатуры в xterm

Всем привет! Столкнулся с следующей проблемой: не работает ввод с клавы в xterm.

Система сконфигурирована следующим образом: дисплейный менеджер отключен, при старте системы демон запускает софтину при помощи startx, также запускается демон для отлавливания моих сигналов в dbus. В софтине, по нажатию на кнопку, я даю сигнал в dbus о запуске скрипта через xterm. Xterm стартует, выводит выхлоп скрипта, но ввод клавы не видит…

Самое интересное, что если запустить софтину с запущенным дисплейным менеджером или ручками отправить сигнал в dbus о запуске скрипта через xterm, то все отлично работает!

Еще момент. В открывшемся xterm мышью можно выделить текст (так что вариант с тем, что на xterm нет фокуса, отпадает. Хотя, возможно, без ДМ мышью фокус не переключить).

Я уже что только не перепробовал, но решить проблему не удается…

 , ,

Janis
()

RSS подписка на новые темы