jueves, 26 de diciembre de 2024

Linux - Cambiar de disco duro - Migrar particiones

  Página principal

Linux
Cambiar de disco duro
Mantener los datos



El otro día tuve la necesidad de cambiar el disco duro por otro de mayor capacidad.
Pero quería conservar toda la instalación y datos de la partición Linux.
Lo que si quería es que la partición Linux tuviese más capacidad de almacenamiento.
Mirando por internet, encontré la solución.

Mi caso es un poco atípico, debido a que tengo 2 discos duros con varias particiones:
- El disco 1 sda es un disco (magnético) de 1T = 931,51 GiB
  Este disco duro lo utilizo principalmente para DATOS, aunque tengo varias particiones con WIN10 y Linux.
  He de comentar que Windows10 es bastante lento en discos magnéticos, pero es como lo tengo.
-El disco 2 sdb es un disco SSD de 465,76 GiB.
 Este disco duro lo utilizo para los sistemas operativos, ya sean varios Linux, como un Windows7.

Empecemos.

Desde una instalación Linux Live entramos en consola y siendo root realizaremos todas las operaciones.

Lo primero es identificar los discos y las particiones.
root@TRABA:/home/seta# /sbin/fdisk -l
Disco /dev/sdb: 465,76 GiB, 500107862016 bytes, 976773168 sectores
Modelo de disco: CT500BX500SSD1 
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x2c019ec5

Disposit.  Inicio  Comienzo     Final  Sectores Tamaño Id Tipo
/dev/sdb1  *           2048    206847    204800   100M  7 HPFS/NTFS/exFAT
/dev/sdb2            206848 178053119 177846272  84,8G  7 HPFS/NTFS/exFAT
/dev/sdb3         178055166 976771071 798715906 380,9G  f W95 Ext'd (LBA)
/dev/sdb5         178055168 335341567 157286400    75G 12 Compaq diagnostics
/dev/sdb6         335343616 352120831  16777216     8G 82 Linux swap / Solaris
/dev/sdb7         352122880 477951999 125829120    60G 43 desconocido
/dev/sdb8         477954048 603783167 125829120    60G 83 Linux
/dev/sdb9         603785216 682260479  78475264  37,4G 83 Linux
/dev/sdb10        740503552 802879487  62375936  29,7G 83 Linux
/dev/sdb11        802881536 862699519  59817984  28,5G 83 Linux
/dev/sdb12        862701568 914946047  52244480  24,9G 83 Linux
/dev/sdb13        914948096 976771071  61822976  29,5G 83 Linux
/dev/sdb14        682262528 740501503  58238976  27,8G 83 Linux

Las entradas de la tabla de particiones no están en el orden del disco.


Disco /dev/sda: 931,51 GiB, 1000204886016 bytes, 1953525168 sectores
Modelo de disco: ST1000DM003-1CH1
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 4096 bytes
Tamaño de E/S (mínimo/óptimo): 4096 bytes / 4096 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x48d5e0eb

Disposit.  Inicio   Comienzo      Final   Sectores Tamaño Id Tipo
/dev/sda1  *            2048    1187839    1185792   579M  7 HPFS/NTFS/exFAT
/dev/sda2            1187840  122898431  121710592    58G  7 HPFS/NTFS/exFAT
/dev/sda3          122900478 1873399807 1750499330 834,7G  f W95 Ext'd (LBA)
/dev/sda4         1873399808 1953523711   80123904  38,2G 83 Linux
/dev/sda5          122900480  752125951  629225472   300G  7 HPFS/NTFS/exFAT
/dev/sda6          752128000 1381273599  629145600   300G  7 HPFS/NTFS/exFAT
/dev/sda7         1381275648 1465161727   83886080    40G 83 Linux
/dev/sda8         1465163776 1471455231    6291456     3G 82 Linux swap / Solaris
/dev/sda9         1471457280 1597286399  125829120    60G 83 Linux
/dev/sda10        1597288448 1723117567  125829120    60G 83 Linux
/dev/sda11        1723119616 1775548415   52428800    25G 83 Linux
/dev/sda12        1775550464 1873399807   97849344  46,7G 83 Linux



Mi idea es copiar la partición /dev/sda11 a /dev/sdb13
Como podemos observar la partición de origen tiene 25G y la partición de destino 30G
Debemos tener claro lo que queremos hacer, no hay vuelta atrás, si nos equivocamos en la partición de destino podemos sobrescribir datos.

Utilizamos el comando dd
  • Comando dd
  • if=/dev/sda11  Particion de origen, (input)
  • of=/dev/sdb13  Partición de destino, (output)
  • status=progress  Nos permite ver en directo la evolución de la copia.
  • bs=4M  Utilizamos un buffer de 4M para que la copia sea más rápida.
  • && sync  Al terminar la copia obliga al sistema a vaciar todo el buffer de escritura, escribiendo todos los datos.

root@TRABA:/home/seta# dd if=/dev/sda11 of=/dev/sdb13 status=progress bs=4M && sync

26780631040 bytes (27 GB, 25 GiB) copied, 237 s, 113 MB/s
6400+0 records in
6400+0 records out
26843545600 bytes (27 GB, 25 GiB) copied, 243,467 s, 110 MB/s


Con el comando df podemos ver el tamaño del sistema de archivos.

root@TRABA:/home/seta# df
S.ficheros     bloques de 1K    Usados Disponibles Uso% Montado en
udev                 8090288         0     8090288   0% /dev
tmpfs                1624808      1400     1623408   1% /run
/dev/sdb7           61611820  17478284    40971424  30% /
tmpfs                8124036      1376     8122660   1% /dev/shm
tmpfs                   5120         8        5112   1% /run/lock
tmpfs                1624804        68     1624736   1% /run/user/1000
/dev/sda6          314572796 177241236   137331560  57% /mnt/DATOS2
/dev/sda5          314612732  72034952   242577780  23% /mnt/DATOS1
/dev/sdb13          25626852  17379920     6919828  72% /media/seta/rootMX18.3

Observamos el tamaño del sistema de archivos de /dev/sdb13, es de 25G, aunque la partición es de 30G.
Debemos arreglar esto, y expandir el sistema de archivos al tamaño de la partición.

Lo primero es revisar el sistema de archivos creado con le comando e2fsck
root@TRABA:/home/seta# /sbin/e2fsck -f /dev/sdb13
e2fsck 1.47.0 (5-Feb-2023)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
rootMX18.3: 416123/1638400 ficheros (0.4% no contiguos), 4491867/6553600 bloques


Con el comando resize2fs expandimos el sistema de archivos al tamaño de la partición.
root@TRABA:/home/seta# /sbin/resize2fs /dev/sdb13
resize2fs 1.47.0 (5-Feb-2023)
Cambiando el tamaño del sistema de ficheros en /dev/sdb13 a 7727872 (4k) bloques.
El sistema de ficheros en /dev/sdb13 tiene ahora 7727872 bloques (de 4k).


Observamos que el tamaño del sistema de archivos corresponde al tamaño de la partición 30G.
root@TRABA:/home/seta# df
S.ficheros     bloques de 1K    Usados Disponibles Uso% Montado en
udev                 8090288         0     8090288   0% /dev
tmpfs                1624808      1404     1623404   1% /run
/dev/sdb7           61611820  17470108    40979600  30% /
tmpfs                8124036      1376     8122660   1% /dev/shm
tmpfs                   5120         8        5112   1% /run/lock
tmpfs                1624804        68     1624736   1% /run/user/1000
/dev/sda6          314572796 177241236   137331560  57% /mnt/DATOS2
/dev/sda5          314612732  72034952   242577780  23% /mnt/DATOS1
/dev/sdb13          30249924  17379920    11308048  61% /media/seta/rootMX18.3


Para que arranque nuestra distribución Linux en la partición donde hemos copiado los ficheros, deberemos cambiar la configuración del grub que tengamos por defecto.
En mi caso añado en /boot/grub/grub.cfg

menuentry 'MX 18.3  /dev/sdb13' --class mx --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-61916602-287c-4101-868a-431efef9f6a4' {
    insmod part_msdos
    insmod ext2
    set root='hd1,msdos13'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos13 --hint-efi=hd1,msdos13 --hint-baremetal=ahci1,msdos13  61916602-287c-4101-868a-431efef9f6a4
    else
      search --no-floppy --fs-uuid --set=root 61916602-287c-4101-868a-431efef9f6a4
    fi
    linux /boot/vmlinuz-4.19.0-5-686-pae root=/dev/sdb13
    initrd /boot/initrd.img-4.19.0-5-686-pae
}

Conviene revisar el  /etc/fstab por si se cambio el montaje de algunas de las particiones, como puede ser la swap (memoria de intercambio)


Espero que les haya gustado este artículo, y ya no tengan miedo al cambiar de disco duro.


Saludos.
Juan Galaz



Bibliografía:


https://help.clouding.io/hc/es/articles/360010074599-C%C3%B3mo-extender-particiones-manualmente-en-Linux
https://medium.com/@dibaekhanal101/increase-ec2-volume-size-growpart-resize2fs-bd7267b07e94
https://www.iespai.com/2024/04/02/guia-para-utilizar-correctamente-el-comando-dd-como-copia-de-seguridad/



martes, 3 de diciembre de 2024

74HC595 - Arduino - Simul_IDE

  Página principal

74HC595
Arduino


Fruto de despieces de aparatos electrónicos he conseguido el chip 74HC595.
El CHIP 74HC595 es un convertidor de serie a paralelo, anteriormente había realizado un montaje parecido con el 74HC164.
La diferencia entre los dos chip es que el 74HC595 tiene una patilla (RCLK) para enclavar los datos una vez que los tiene en los registros de desplazamiento.
De esta forma los datos no son vistos hasta que la patilla RCLK está en alto.


Probamos el circuito en el simulador, todo funciona correctamente.
El entorno de simulación bajo SimulIde se hace en Debian 12, y me he dado cuenta que la compilación es bastante más rápida que bajo el IDE de arduino.

 
Montamos el circuito en una PROTOBOARD.


Mandado los números desde la consola de arduino, vemos que el circuito funciona bien.

PROGRAMA

VIDEO DEMOSTRATIVO

Espero que os haya gustado este pequeño circuito.

Saludos.
Juan Galaz



Bibliografía:


lunes, 2 de diciembre de 2024

RELOJ con ds1307 - OLED - ROTARY ENCODER - módulo 12E , HW-364B - Raspberry pi pico

He realizado varios montajes de reloj con el DS1307. 

El primero fue idea de Alfredo Segura, Querétaro, México, septiembre de 2024.

CONTRIBUCIÓN - RELOJ DS1307 -Arduino - OLED - Rotary Encoder. RELOJ_0

 

Luego me animé a hacer el mio con los diferentes microcontroladores. 

- Arduino - OLED - Rotary Encoder. RELOJ_SETA

- Raspberry pi pico - OLED - Rotary Encoder.    RELOJ_SETA_2

- ESP8266  , modulo 12E , HW-364B, OLED - Rotary Encoder. RELOJ_SETA_1
 

 

miércoles, 13 de noviembre de 2024

Antena J Doble banda (2m - 70cm) .

Página principal

Antena J 
Doble banda (2m - 70cm) .

Había realizado esta antena hace unos meses, ANTENA J, y quería volverla a ajustar para la que resonase bien tanto en 2m como en 70cm.
Además quería que fuese reducida en el transporte.

En la página  https://m0ukd.com/calculators/slim-jim-and-j-pole-calculator/  explican bastante bien su funcionamiento, además existe una calculadora para las dimensiones.
Pensando en una forma fácil de hacer esta antena, pensé en utilizar la malla de un cable RG58 como elemento radiante, no tenía otro material.
Haciendo los cálculos:




Existen dos modelos, yo he realizado el segundo.
Para la separación he utilizado un tubo de PVC eléctrico de 2 cm de diámetro.

Aunque las medidas teóricas son las que son, luego en la práctica hay que modificarlas.

Después de muchas pruebas cortando el cable para ajustar la antena, decidí colocar una antena del tipo de radio comercial  para modificar la longitud.

Antena montada y lista para su funcionamiento.


Pieza diseñada en FreeCAD e imprimida en PLA.




Conexión del conector BNC.



Para su mejor funcionamiento, debemos ajustar la longitud para cada una de las bandas.


Antena plegada por la mitad.


Sistema de plegado.









Después de realizar todos los ajustes, probé realmente las estacionarias y resultaron casi perfectas.
He de comentar que aún tengo alguna duda sobre si la salida del  WALKIE  está ajustada a una antena de 50 ohmios, o lo ajustan a su propia antena.
Lo bueno de este montaje es que en unos segundo se tiene plegada la antena a unas medidas reducidas para llevar en portátil.


Saludos.
Juan Galaz



Bibliografía:


https://m0ukd.com/calculators/slim-jim-and-j-pole-calculator/



 

viernes, 25 de octubre de 2024

Base de tiempo - 1 Segundo con Arduino ATMEGA328

  Página principal

Base de tiempo
1 Segundo
Arduino ATMEGA328

Después de haber realizado el Generador de DCF77 con el Arduino, me dí cuenta que algunos relojes no sincronizaba bien.
El caso es que debía tener una base de tiempos muy precisa, y con la función de delay
() no servía.
Pensando y mirando montajes anteriores míos, encontré entre mis montajes uno que utilizaba interrupciones internas mediante contadores.

Para este montaje se utilizan los contadores de 16bits, en modo CTC

19.9.2 -Modo de borrado del temporizador en comparación (CTC)
En los modos de borrado del temporizador en comparación (CTC) (modo 4 o 12, WGMn[3:0]=0x4 o 0xC), los registros OCRnA o ICRn se utilizan para manipular la resolución del contador: el contador se pone a CERO cuando el valor del contador (TCNTn) coincide con el OCRnA (si WGMn[3:0]=0x4) o el ICRn (WGMn[3:0]=0xC). El OCRnA o el ICRn definen el valor superior del contador, por lo tanto también su resolución. Este modo permite un mayor control de la frecuencia de salida de comparación. Simplifica la operación de conteo de eventos externos.
El valor del contador (TCNTn) aumenta hasta que se produce una comparación con OCRnA o ICRn, y luego se borra el TCNTn.


ISR(TIMER1_COMPA_vect)
{
  if(playRun==true)  rutina100();   
}


setup()
{
.............
.............
  // Interrupciones cada 0,1 Segundos
    cli();
    TCCR1A=0;
    TCCR1B=0;   
#if MODO_SEG == 0   // 0=999.762.128 nS 1=999.762.876
      OCR1A=1562; 
      TCCR1B |= (1<<WGM12);   //  0 1 0 0 CTC OCR1A Immediate MAX
      TCCR1B |= (1<<CS10);    // clk I/O /1024 (From prescaler)
      TCCR1B |= (1<<CS12);
#endif
#if MODO_SEG == 1   // 1=1.000.081.262 nS  0=1.000.0828
      OCR1A=6253;   //6252 DIV-256
      TCCR1B |= (1<<WGM12);   //  0 1 0 0 CTC OCR1A Immediate MAX
      TCCR1B |= (1<<CS12); // clk I/O /256 (From prescaler)
#endif  
#if MODO_SEG == 2   // DIV-64
      OCR1A=25031;
                      // 25020    1.000.282.772 nS
                      // 25015    1.000.082.800 nS
                      // 25013 DIV-64   1.000.003.00 nS
                      // 25013 DEDO     1.000.241.871
                      //       DEDO     1.000.121.011
                      // 25013 otro reloj 999.289.372 nS
                      // 25032 otro reloj 1.000.052.634 nS
                      // 25031 otro reloj 1.000.012.119 nS
      TCCR1B |= (1<<WGM12);   //  0 1 0 0 CTC OCR1A Immediate MAX
      TCCR1B |= (1<<CS10); // clk I/O /64 (From prescaler)
      TCCR1B |= (1<<CS11);
#endif
  TIMSK1=(1<<OCIE1A);     // Timer/Counter1, Output Compare A Match Interrupt Enable 
  sei(); 
}


En el código se crea un a interrupción cada 0.1 Segundos.
Con un contador hasta 10, se crea un incremento de 1 Segundo.
Al utilizar los prescaler de   /1024, /265, /64 , podemos aumentar la resolución.
La mejor resolución la conseguimos al utilizar la división 64 , o eso debería ocurrir.





DIV 1024 16000000/1024=15625/10=1562 999.762.128 nS
DIV 256 16000000/256=62500/10=6250 1.000.081.262
DIV 64 16000000/64=250000/10=25000 25020    1.000.282.772 nS
25015    1.000.082.800 nS
25013    1.000.003.000 nS
25013    1.000.241.871 ns    DEDO    
25013    1.000.121.011 ns   DEDO2    

25013    999.289.372 nS    otro reloj
25032   1.000.052.634 nS  otro reloj
25031   1.000.012.119 nS  otro reloj

Todos los tiempos de este montaje dependen de la precisión del cristal de cuarzo a 16 MHz.
Es claro que para el circuito del Arduino nano, no creo que empleen un cristal demasiado exacto.

Entre dos Arduinos nano existe una variación de 14 microsegundos.

Con el mismo módulo nano, si colocamos el dedo sobre el cristal de cuarzo, la variación llega alcanzar 118 microsegundos.
Esto puede ser debido al aumento de temperatura y a la variación de capacidad que induce el dedo.

Vamos a realizar unos cálculos sobre la variación de tiempo en un reloj después de 3 meses, en el caso de 1.000.003.000 nS.

1 Segundo ->3 microSegundos
1h -> 10800 uS
1 dia ->259200 uS   (0.259 S.)
3 meses->23 Segundos

Conclusión:
Se puede y no se puede utilizar el ATMEGA328 como base de tiempos de un reloj.
Lo primero que debemos hacer es ajustar el temporizador para cada circuito nano, y obtener la la mejor precisión, o tener un cristal de 16MHz muy preciso.
También tenemos que tener cuidado la temperatura del entorno del Arduino nano.
Para las medidas he utilizado un analizador de señal Saleae Logic , y no estoy seguro de su precisión, creo que es alta.

Programa Arduino

Espero que os haya gustado este pequeño análisis.

Saludos.
Juan Galaz





jueves, 24 de octubre de 2024

DCF77 - Generador de señal - Signal generator - Versión 2 - DS1302

  Página principal

DCF77
Generador de señal
Signal generator
Versión 2  - DS1302

Después de haber realizado el Generador de DCF77 con el arduino, me dí cuenta que algunos relojes no sincronizaba bien.
También me resultaba engorroso tener que
actualizar la hora mediante un ordenador, antes de emitir la señal DCF .
He visto que se podía mejorar el código del arduino y el circuito mediante:
-Mejorando el tiempo de interrupción de 0.1 Segundo. Me dí cuenta que ciertos relojes exigen alta precisión, de esta forma la mayoría de los relojes se sincronizan.
-Cambiando la resistencia de la señal DCF a 4K7.
-Eliminando la parte del modo del audio.
-Se coloca una variable en compilación #define SINCRO . Según el manual DCF, la señal de DCF debe sincronizarse con el flanco de bajada de la portadora. Funciona igual con sincronización que sin ella, por lo que lo dejo a gusto de cada uno.
-La resistencia R1 es de 100 ohmios, para que module al 20%, pero también funciona si se modula al 0%, para este caso debemos colocar la resistencia a 0 ohmios.
-He colocado un pulsador para las pruebas. Si durante el arranque se tiene pulsado, carga una fecha prefijada y no la carga del DS1302.  Fecha prefijada:  7:52:50   9/10/2024 .


Esquema realizado con https://easyeda.com.

Circuito montado.


Señales generadas.


La sincronización tarda entre 2 y 5 minutos. La distancia entre el circuito emisor y los radio relojes es de 80 cm.

También he creado un programa en Linux bajo consola para poner la fecha y la hora automáticamente.
./dcfSerie /dev/ttyUSB0

El programa en arduino admite una serie de ordenes:
HORA=

SEGUNDO=
MINUTO=
DIAMES=
DIASEMANA=  (Algunos relojes comprueban que sea correcto)
MES=
ANO=
PRINT
START
STOP
SAVE
LOAD

Durante el arranque del circuito, espera 15 antes de empezar a emitir señal.
En el tiempo de espera de 15 segundos, si se ejecuta el programa en consola, se actualiza la hora y la fecha en el DS1302.



Programa Arduino
Programa Linux

Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


PTB-Mitteilungen_2009_Heft_3_en

http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm
https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html
https://es.wikipedia.org/wiki/DCF77
https://j-rpm.com/2019/05/transmisor-experimental-dcf77/
http://www.redesmadrid.com/?page_id=4
Radio watch sync   en Google Play

domingo, 13 de octubre de 2024

DCF77 Generador de señal - Signal generator - ESP-12E ESP8266

  Página principal

DCF77
Generador de señal
Signal generator
ESP-12E   ESP8266

Después de haber realizado el Generador de DCF77 con el ESP32, he realizado el mismo circuito pero con el ESP8266, placa ESP-12E.
El ESP8266 es el hermano pequeño del ESP32, no tiene bluetooth ni doble procesador, pero para este montaje no hace falta.
Voy a utilizar el programa de 
https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32  , pero con alguna modificación para que funcione con el ESP8266.

Para generar la señal de 77.5 KHz he utilizado:
analogWriteFreq(FRECUENCIA);
analogWrite(OUT_DCF, 128);
No es que sea muy fiable, he tenido que configurar al variable #define FRECUENCIA 76190  para que genere 77.5 KHz.
En ESP8266 no existe ledcAttach(ANTENNAPIN, FRECUENCIA, RESOLUCION);

Montado todo funcionaba bien, solo debía configurar mi red wifi cambiando los valores en:
// Wifi credentials
const char* ssid = "yourSSID";
const char* password = "yourPassword";

Respecto al anterior circuito he quitado el display OLED.

Esquema realizado con https://easyeda.com.


El que haya realizado montajes con estos módulos, se habrá vuelto loco con los pins.
Esta es la relación de los diferentes pins.










Antes

Después

Con la prueba que he realizado  me funcionan todos lo relojes radio-controlados.

PROGRAMA

VIDEO

------------------------------------------------


Para los que quieran colocar un OLED el diagrama es el siguiente.

PROGRAMA
He de comentar que me dio bastantes problemas, las rutinas del display  deben interferir los tiempos de la interrupción, me costó tiempo averiguarlo.
Por lo cual solo se utiliza al principio para ver la IP y el día, en cualquier otra parte del programa induce a error en los tiempos, y los relojes no se sincronizan.
Si leemos en el manual "
El ESP8266 no tiene pines I2C de hardware, pero se puede hacer mediante "bitbanging". Funciona bastante bien y el ESP8266 es lo suficientemente rápido como para igualar la velocidad del 'nivel Arduino'. ".
Este es el motivo de que no se pueda utilizar el BUS I2C en el ESP8266 en este montaje.


Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32
PTB-Mitteilungen_2009_Heft_3_en

http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm
https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html
https://es.wikipedia.org/wiki/DCF77
https://j-rpm.com/2019/05/transmisor-experimental-dcf77/
http://www.redesmadrid.com/?page_id=4
Radio watch sync   en Google Play