Só dando um pitaco aqui no tópico, me parece que a questão não seja verdadeiramente de um hotswap, embora esse termo tenha uso consagrado e seja mesmo usado indistintamente em qualquer situação.
O hotswap verdadeiro pressupõe a troca efetiva de uma unidade de disco que esteja trabalhando no sistema, mesmo aquela que contém o próprio sistema operacional, situação típica de uma instalação em RAID, em que há a imediata redundância de discos e cujo controle é feito por hardware.
Então, na hipótese descrita nesse tópico, o caso me parece que seja na realidade de hotpluggable, embora até mesmo pelos usos e costumes se possa continuar falando em hotswap.
Bem, como o zekkerj já bem observou, a característica hotpluggable é nativa do sistema, ao menos na sua forma mais simples, uma vez que a qualquer instante posso colocar um pendrive ou ainda uma unidade de HD-USB a funcionar, bastando plugar e o reconhecimento é feito a seguir, o mesmo devendo ocorrer com uma unidade de disco apropriada ao hotswap, por exemplo do tipo SCSI/SAS ou mesmo SATAs adequadas, onde a característica é ter algum dispositivo, alguma chave, que interrrompa a corrente elétrica e o giro, já que não seria apropriado fazer isso com o disco em movimentação ao arrancá-lo fisicamente.
Numa unidade apropriada a controladora é programada para reconhecer quando a unidade foi desconectada ou conectada e consegue comunicar essa informação, o que faz com que o SO trate o hotswap SATA da mesma forma que faz com drives USB ou FireWire, como ocorre com controladoras Intel ICH8 executado em modo AHCI, possivelmente havendo a opção de BIOS para habilitar ou desabilitar.
Só que a questão aqui é fazer isso com uma unidade de disco que não é apropriada a esse procedimento, como geralmente as SATAs não são, ou seja, estamos falando em **fazer hotplugging em SATA não apropriada**, bem, então de alguma forma isso tem que ser dito ao SO.
Parece-me que aí talvez seja possível usar o pmount (policy mount), o qual, claro precisa estar previamente instalado no sistema.
sudo apt-get install pmount
Já que v. está disposto a correr o risco de "queimar" alguns HD (e talvez até a própria motherboard) então é fazer algumas experiências, claro que não na máquina de serviço mas em uma bancada de teste com o SO ativo, o que é muito simples de plugar e ver o que acontece. :-)
Estou aqui com uma dúvida de como passar essa informação ao SO pelo pmount uma vez que o Ubuntu usa o UUID, e assim talvez não aceite a sintaxe comum de dispositivo-unidade (tipo sdc, sdd, etc) então acho que teria que obter previamente o UUID do volume, para o caso de ser necessário entrar com ele.
Monte o HD que vai ser hotplugged na bancada num sistema normal, carregue o sistema e anote a parte o UUID pelo blkid (porque também não sei se seria possível usar isso após plugar, talvez sim, só experimentando, em todo caso, como teste anote antecipadamente).
Desligue o sistema e retire o HD-teste e agora é partir para a experiência.
Um primeiro passo, penso, é observar como o sistema se comporta ao plugar, observando o registro de log em tempo real, para o que acho que pode usar:
tail -f /var/log/syslog
Esse comando vai mostrar em tempo real os 10 últimos eventos do sistema e vai atualizando na medida em que ocorrem novos eventos (experimente fazer com um pendrive, é fácil de entender a saída).
Dá alguma coisa assim:
user@hal9000:/var/log$ tail -f /var/log/syslog
Jun 10 13:32:01 hal9000 kernel: [10213.985753] sd 7:0:0:0: [sdd] No Caching mode page present
Jun 10 13:32:01 hal9000 kernel: [10213.985757] sd 7:0:0:0: [sdd] Assuming drive cache: write through
Jun 10 13:32:01 hal9000 kernel: [10213.988378] sd 7:0:0:0: [sdd] No Caching mode page present
Jun 10 13:32:01 hal9000 kernel: [10213.988382] sd 7:0:0:0: [sdd] Assuming drive cache: write through
Jun 10 13:32:01 hal9000 kernel: [10213.988891] sdd: sdd1
Jun 10 13:32:01 hal9000 kernel: [10213.993077] sd 7:0:0:0: [sdd] No Caching mode page present
Jun 10 13:32:01 hal9000 kernel: [10213.993081] sd 7:0:0:0: [sdd] Assuming drive cache: write through
Jun 10 13:32:01 hal9000 kernel: [10213.993084] sd 7:0:0:0: [sdd] Attached SCSI removable disk
Jun 10 13:32:02 hal9000 kernel: [10215.000043] usb 2-2: reset high speed USB device using ehci_hcd and address 3
Jun 10 13:33:05 hal9000 kernel: [10277.184786] usb 2-2: USB disconnect, address 3
Jun 10 13:33:44 hal9000 kernel: [10316.230025] usb 2-2: new high speed USB device using ehci_hcd and address 4
Jun 10 13:33:44 hal9000 kernel: [10316.390670] scsi8 : usb-storage 2-2:1.0
Jun 10 13:33:45 hal9000 kernel: [10317.391293] scsi 8:0:0:0: Direct-Access Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 CCS
...
...
...
Isso, acho, vai permitir um panorama do que acontece quando se coloca uma SATA não apropriada e aí talvez tenhamos pistas de como ajustar e, principalmente, vai permitir saber como a unidade está sendo identificada (no exemplo acima foi sdd e como só há uma partição, designou sdd1, como se pode ver).
O pmount possibilita a montagem sem uma entrada correspondente no /etc/fstab, porém se a unidade é vista como não-removível irá recusar-se a montá-la, a menos que v. adicione o nome do dispositivo no /etc/pmount.allow, que se não existir deverá ser criado.
Na verdade isso deveria ser feito antes de plugar o SATA, só que aqui entra a dúvida se vai aceitar por identificação só de unidade-partição ou se precisa entrar com o UUID, ou talvez seja necessário ajustar no /etc/default/grub descomentando e atualizando:
#GRUB_DISABLE_LINUX_UUID=true
Para atualizar:
sudo update-grub
É o caso de tentar um e outro e ver o que acontece.
Se não existir o /etc/pmount.allow (quando instala ele cria) crie um, o que pode ser feito pelo touch
sudo touch /etc/pmount.allow
Registre no /etc/pmount.allow a permissão de montagem:
De uma forma geral deveria ser isso, ajustando ao caso concreto:
echo '/dev/sdb1' >> /etc/pmount.allow
echo '/dev/sdc[123]' >> /etc/pmount.allow
echo '/dev/sdd*' >> /etc/pmount.allow
No primeiro exemplo está comandando uma particular partição a ser montada (sdb1), no segundo são três partições e no último todas as partições que existirem no disco. Como experiência inicial seria melhor usar mais objetivamente o primeiro caso num disco com uma partição única só para simplificar o raciocínio.
Do pmount sabemos a sintaxe geral:
pmount [ options ] device
pmount [ options ] device label
pmount --lock [ options ] device pid
pmount --unlock [ options ] device pid
pmount
A unidade deverá ser montada em /media
Se label é dado, a montagem será /media/label, caso contrário, será /media/device.
As flags que são utilizadas como padrão na execução do comando são:
async,atime,nodev,noexec,noauto,nosuid,user,rw
Talvez seja necessário adicionar a permissão de montagem ao usuário específico, fazendo como root:
# adduser user plugdev (user substitui pelo nome de usuário real)
A Policy do pmount identifica as seguintes condições:
A montagem será feita se *todas* as seguintes condições forem encontradas:
- 'device' é um bloco device em /dev;
- 'device' não está em /etc/fstab (se estiver, pmount executa o 'mount device' comum de forma transparente ao usuário);
- 'device' não está já montado de acordo com o /etc/mtab e com o /proc/mounts;
- se o ponto de montagem já existe e o dispositivo já não está nele montado e o diretório está vazio;
- 'device' é removível (USB, FireWire, ou dispositivo MMC, ou /sys/block/drive/removable está como permissão (whitelisted, lista branca) em /etc/pmount.allow;
- 'device' não se encontra travado (lock)
As opções do pmount que nesse caso parecem relevantes são:
-r, --read-only
-w, --read-write
-s, --sync
-A, --noatime
-e, --exec
-t filesystem, --type filesystem
-c charset, --charset charset (default é utf8)
-u umask, --umask umask
--dmask dmask
--fmask fmask
-d, --debug
Creio que no comando seria melhor informar desde logo o sistema de arquivos presente no disco (por exemplo ext4, etc) e, aliás, apenas para teste e para simplificar acho que seria melhor usar o ext4, depois aperfeiçoa com outras variantes se tudo funcionar.
Os sistemas suportados são:
udf, iso9660, vfat, ntfs, hfsplus, hfs, ext3, ext2, ext4, reiserfs, reiser4, xfs, jfs e omfs. Eles são tentados sequencialmente nessa exata ordem se o filesystem não for especificado.
Isso posto, plugada a SATA a quente, de cara entraria com algo assim (por exemplo unidade de disco identificada como sdd, partição única sdd1 e hipotético UUID=123456789, sabendo-se que a formatação é ext4):
sudo pmount -t ext4 /dev/sdd1
ou talvez ainda assim:
sudo pmount -t ext4 UUID=123456789
No primeiro caso talvez tenha que alterar o /etc/default/grub como já explicado.
É experimentar para ver o que acontece.
[]'s