como o formato do Solaris pode gravar em um disco sem estar presente um vtoc?

1

Fatos:

  • VTOC (ou EFI) é necessário para acessar fatias de um dispositivo de disco
  • s2 slice é usado para acessar o disco inteiro (incluindo o VTOC no início do disco)
  • novo dispositivo de disco vem sem VTOC
  • system: Solaris 10 OS, na arquitetura SPARC

Pergunta: Como pode ser, esse formato é capaz de gravar o VTOC em um disco se ele não tiver um VTOC?

Pergunta em detalhes: Para criar o VTOC, o formato precisa escrever s2. Para escrever s2, o VTOC precisa existir. Simplificado: para criar VTOC, o VTOC precisa existir. Como esse problema de galinha e ovo é evitado pelo formato?

ext # 1: se eu rotular um disco não rotulado (c2t5006016041E076B0d8s2), ocorrerá o seguinte:

[...]
11157:  open("/dev/rdsk/c2t5006016041E076B0d8s2", O_RDWR|O_NDELAY) = 3
[...]
11157/1:        write(1, " D i s k   n o t   l a b".., 33)      = 33
11157/1:        read(0, 0xFF2B9CD0, 1024)       (sleeping...)
11157/1:        read(0, " y\n", 1024)                           = 2
11157/1:        open("/dev/rdsk/c3t5006016141E076B0d8s0", O_RDONLY|O_NDELAY) = 4
11157/1:        ioctl(4, 0x0417, 0xFFBFED80)                    Err#22 EINVAL
11157/1:        close(4)                                        = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF52C)                    = 0
11157/1:        ioctl(3, 0x0402, 0xFFBFF644)                    = 0
11157/1:        ioctl(3, 0x0418, 0xFFBFF670)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        write(1, "\n\n F O R M A T   M E N".., 15)      = 15
[...]

quais são as chamadas ioctl ()? Eles fazem o trabalho de forma limpa, mas quais são essas chamadas, na verdade?

    
por asdmin 05.11.2010 / 13:07

3 respostas

4

O sistema operacional não usa chamadas de leitura / gravação para ler ou gravar no vtoc. Ele só precisa ser capaz de abrir com sucesso o dispositivo s2 (que é apenas um link simbólico para o dispositivo real) para saber se um disco está lá. Espera-se que não haja necessidade da fatia s2 existir no disco para que essa abertura seja bem-sucedida. O comando format usa funções de baixo nível implementadas no driver de dispositivo para acessar e gravar o vtoc. Os ioctls que você observou são precisamente essas chamadas.

por exemplo,

  • 0x0417 = DKIOCGEXTVTOC (obtenha vtoc estendido)
  • 0x0402 = DKIOCSGEOM (definir geometria)
  • 0x0418 = DKIOCSEXTVTOC (gravar o vtoc estendido no disco)
por 09.11.2010 / 11:07
3

No nível bruto, o VTOC é apenas outro bloco no disco. No entanto, está sempre no mesmo local. format (1m) e fmthard (1m) manipulam o disco através do dispositivo de disco bruto ( /dev/rdsk/c... ) e acessam diretamente os setores que devem conter o VTOC - se ele não existir, eles simplesmente sobrescrevem o conteúdo existente daquele setor. / p>     

por 05.11.2010 / 13:28
2
O formato

(1M) não precisa de fatias para funcionar, ele acessa o dispositivo de disco bruto e o rotula. Depois que o disco é rotulado, a fatia s2 é uma maneira de endereçar todo o disco.

Por outro lado, fmthard não pode escrever um VTOC em um disco que não esteja rotulado. Você tem que rotulá-lo primeiro com o formato (1M).

Eu acredito que não há problema de ovo e galinha, é só que alguns utilitários sabem acessar um disco cru e escrever o que é necessário, e outros precisam de mais orientação com fatias.

    
por 06.11.2010 / 22:23