inicializa em um sistema de arquivos espelhado do LVM

0

Meu servidor pessoal (computador ARM pequeno odroid-c1) está executando o Archlinux em um sistema de arquivos LVM sobre discos USB. Volumes lógicos contendo dados (backups, etc) são espelhados e tudo funciona bem.

Agora, eu espelio o sistema de arquivos raiz com o comando:

sudo lvconvert -m 1 VG01/NASSYS

O processamento de comandos é Ok e, depois de um tempo, o NASSSYS LV é 100% espelhado.

Mas, na reinicialização, o sistema trava, como se não pudesse reconhecer o volume LVM espelhado. Se eu reverter para um NASSYS LV não espelhado, a inicialização é Ok novamente.

Não é possível espelhar um sistema de arquivos raiz?

(Abaixo da cópia do meu post anterior, fechado e sem resposta, para detalhes completos)

Post anterior Eu instalei meu servidor de arquivos pessoal executando o ARM Archlinux em um computador Odroid-C1 (uma pequena placa de computador, semelhante ao Raspberry Pi) e um Xystec PX2590 USB contendo 4 discos, sendo 2 deles configurados em LVM2 em um único VG (VG01) e vários LVs, não espelhados, incluindo NASSYS, SDATA e GDATA.

Exceto pelo diretório / boot, que reside em um SDCard (obrigatório para inicializar o Odroid-C1), o Sistema Archlinux é instalado no NASSYS LV.

A configuração do processo de inicialização, descrita no arquivo /boot/boot.ini, permite alterar o dispositivo raiz para o NASSYS LV depois que o Kernel é carregado a partir do SDCard (veja a instrução setenv abaixo).

Trecho do arquivo /boot/boot.ini

...
setenv bootargs "console=ttyS0,115200n8 console=tty0 rootwait root=/dev/mapper/VG01-NASSYS lvmwait=/dev/mapper/VG01-NASSYS rw no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=${m} m_bpp=${m_bpp} vout=${vout_mode} ${disableuhs} ${hdmi_hpd} ${hdmi_cec}"

ext4load mmc 0:1 0x21000000 /boot/uImage
ext4load mmc 0:1 0x30000000 /boot/uInitrd
ext4load mmc 0:1 0x21800000 /boot/dtbs/meson8b_odroidc.dtb
fdt addr 21800000

if test "${vpu}" = "0"; then fdt rm /mesonstream; fdt rm /vdec; fdt rm /ppmgr; fi

if test "${hdmioutput}" = "0"; then fdt rm /mesonfb; fi

bootm 0x21000000 0x30000000 0x21800000

Esta configuração é Ok, e o sistema é inicializado e funciona perfeitamente (veja meu publique no Fórum do Odroid para ler toda a história desta instalação!)

Eu planejei proteger meu sistema espelhando meus xDATA LVs usando os seguintes comandos:

$ sudo lvconvert -m 1 VG01/SDATA
$ sudo lvconvert -m 1 VG01/GDATA

Todos os comandos foram executados corretamente e, após a sincronização dos espelhos, reiniciei o sistema, que estava funcionando sem problemas.

Ultimamente, decidi espelhar o NASSYS LV, contendo o sistema de arquivos raiz com o mesmo comando:

$ sudo lvconvert -m 1 VG01/NASSYS

Este comando também correu sem nenhum erro, e depois que o espelhamento foi terminado, eu reiniciei o sistema, mas ele travou, e eu tive que desligar o computador (eu tentei várias vezes).

Usando o Minicom, usei o console serial para visualizar o processo de inicialização no meu laptop, mas não vi nenhum erro relevante. O processo de inicialização simplesmente parou, parecendo esperar pelo sistema de arquivos raiz ... Então eu suspeitei que o espelhamento do NASSYS quebrou um pouco esse reconhecimento

Isso foi confirmado revertendo, do meu laptop, NASSYS para um LV linear com o comando:

$ sudo lvconvert -m 0 VG01/NASSYS

O Odroid-C1 é iniciado novamente normalmente.

Aqui estão as últimas linhas do processo de inicialização quando ele falha

...
[    6.549908@0]  sda: sda1
[    6.564824@0] sd 0:0:0:0: [sda] No Caching mode page found
[    6.567473@0] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    6.576850@0] sd 0:0:0:0: [sda] Attached SCSI disk
[    7.189162@3] device-mapper: uevent: version 1.0.3
[    7.192823@3] device-mapper: ioctl: 4.24.0-ioctl (2013-01-15) initialised: [email protected]
[    7.228105@2] bio: create slab <bio-2> at 2
[    8.639100@0] emmc: mmc_rescan_try_freq: trying to init card at 300000 Hz
[    8.678075@0] aml_emmc_hw_reset 1379
<<< BOOT HANGED HERE >>>

e a mesma parte do processo de inicialização quando obtém

....
[    6.268597@3] sd 0:0:0:3: [sdd] No Caching mode page found
[    6.268602@3] sd 0:0:0:3: [sdd] Assuming drive cache: write through
[    6.268609@3] sd 0:0:0:3: [sdd] Attached SCSI disk
[    6.332835@2] sd 0:0:0:2: [sdc] No Caching mode page found
[    6.335515@2] sd 0:0:0:2: [sdc] Assuming drive cache: write through
[    6.341668@2] sd 0:0:0:2: [sdc] Attached SCSI disk
[    6.938489@1] device-mapper: uevent: version 1.0.3
[    6.941347@1] device-mapper: ioctl: 4.24.0-ioctl (2013-01-15) initialised: [email protected]
[    6.991678@0] bio: create slab <bio-2> at 2
[    7.504299@1] force enable DISCARD here for ext4 fs
[    7.514669@1] checked enable EXT4 DISCARD here
[    7.517501@1] EXT4-fs (dm-2): mounting with "discard" option, but the device does not support discard
[    7.525519@1] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: (null)
[    8.539137@0] emmc: mmc_rescan_try_freq: trying to init card at 300000 Hz
[    8.552060@3] systemd-journald[111]: Received SIGTERM from PID 1 (systemd).
[    8.578083@0] aml_emmc_hw_reset 1379
[    9.148086@1] Changing uart_ao_ttyS0: baud from 0 to 115200
[   10.227180@2] EXT4-fs (dm-2): re-mounted. Opts: data=ordered
[   10.284815@2] systemd-journald[245]: Failed to set file attributes: Inappropriate ioctl for device
[   11.498794@3] Driver for 1-wire Dallas network protocol.
[   12.149753@3] ionvideo open
[   12.152921@3] ionvideo_stop_generating!!!!
[   12.155830@3] ionvideo release
[   12.149860@3] amlvideo openamlvideo close[   13.336840@3] systemd-journald[245]: Received request to flush 1
[   13.402213@0] force enable DISCARD here for ext4 fs
[   13.411071@0] checked enable EXT4 DISCARD here
[   13.414142@0] EXT4-fs (mmcblk0p1): mounting with "discard" option, but the device does not support discard
<<< BOOT CONTINUES NORMALLY >>>
...

Apesar de muitas pesquisas na Internet, não encontrei nenhuma informação sobre esse tipo de problema relacionado ao LVM. Poderia ser específico para ARM?

Ou eu perdi alguma coisa no arquivo de configuração do LVM abaixo?

config {
    checks = 1
    abort_on_errors = 0
    profile_dir = "/etc/lvm/profile"
}
devices {
    dir = "/dev"
    scan = [ "/dev" ]
    external_device_info_source = "none"
    obtain_device_list_from_udev = 1
    cache_dir = "/etc/lvm/cache"
    cache_file_prefix = ""
    write_cache_state = 1
    sysfs_scan = 1
    multipath_component_detection = 1
    md_component_detection = 1
    fw_raid_component_detection = 0
    md_chunk_alignment = 1
    data_alignment_detection = 1
    data_alignment = 0
    data_alignment_offset_detection = 1
    ignore_suspended_devices = 0
    ignore_lvm_mirrors = 1
    disable_after_error_count = 0
    require_restorefile_with_uuid = 1
    pv_min_size = 2048
    issue_discards = 0
}
allocation {
    maximise_cling = 1
    use_blkid_wiping = 1
    wipe_signatures_when_zeroing_new_lvs = 1
    mirror_logs_require_separate_pvs = 0
    cache_pool_metadata_require_separate_pvs = 0
    thin_pool_metadata_require_separate_pvs = 0
}
log {
    verbose = 0
    silent = 0
    syslog = 1
    overwrite = 0
    level = 0
    indent = 1
    command_names = 0
    prefix = "  "
    debug_classes = [ "memory", "devices", "activation", "allocation",
              "lvmetad", "metadata", "cache", "locking" ]
}
backup {
    backup = 1
    backup_dir = "/etc/lvm/backup"
    archive = 1
    archive_dir = "/etc/lvm/archive"
    retain_min = 10
    retain_days = 30
}
shell {
    history_size = 100
}
global {
    umask = 077
    test = 0
    units = "h"
    si_unit_consistency = 1
    suffix = 1
    activation = 1
    proc = "/proc"
    locking_type = 1
    wait_for_locks = 1
    fallback_to_clustered_locking = 1
    fallback_to_local_locking = 1
    locking_dir = "/run/lock/lvm"
    prioritise_write_locks = 1
    abort_on_internal_errors = 0
    detect_internal_vg_cache_corruption = 0
    metadata_read_only = 0
    mirror_segtype_default = "raid1"
    raid10_segtype_default = "raid10"
    sparse_segtype_default = "thin"
    use_lvmetad = 1
}
activation {
    checks = 0
    udev_sync = 1
    udev_rules = 1
    verify_udev_operations = 0
    retry_deactivation = 1
    missing_stripe_filler = "error"
    use_linear_target = 1
    reserved_stack = 64
    reserved_memory = 8192
    process_priority = -18
    raid_region_size = 512
    readahead = "auto"
    raid_fault_policy = "warn"
    mirror_log_fault_policy = "allocate"
    mirror_image_fault_policy = "remove"
    snapshot_autoextend_threshold = 100
    snapshot_autoextend_percent = 20
    thin_pool_autoextend_threshold = 100
    thin_pool_autoextend_percent = 20
    use_mlockall = 0
    monitoring = 1
    polling_interval = 15
    activation_mode = "degraded"
}
dmeventd {
    mirror_library = "libdevmapper-event-lvm2mirror.so"
    snapshot_library = "libdevmapper-event-lvm2snapshot.so"
    thin_library = "libdevmapper-event-lvm2thin.so"
}

Obrigado pela sua ajuda.

    
por hutou 04.06.2015 / 11:00

2 respostas

1

Eu respondo para mim mesmo. O kernel do Archlinux para o Odroid-C1 não inclui o módulo dm_raid, obrigatório para acessar os espelhos do LVM (agora o raid1 por padrão).

A solução é incluí-lo na variável MODULES do arquivo /etc/mkinitcpio.conf e gerar novamente o uInitrd.

Problema resolvido.

    
por 13.06.2015 / 10:57
0

O link antigo parece não funcionar, então não há detalhes suficientes aqui. Em que ponto do processo de inicialização ele é interrompido, quais são as últimas mensagens antes de ficarem presas? Você tem uma partição / boot separada?

    
por 04.06.2015 / 14:11

Tags