Solid, discos e-sata e udisks (parte 2)

No meu primeiro artigo sobre e-sata, solid e udisks eu escrevi como “hackear” o udisks para informar ao Solid que um disco rígido conectado a uma determinada porta sata é na verdade um disco removível. O udisks-1.0.3 suporta isso sem que tenhamos que aplicar um patch. Nós ainda precisamos adicionar uma regra no udev para indicar qual porta sata deve ser considerada “não interna do sistema“. A regra do udev é ligeiramente diferente da que eu passei no post anterior:

Arquivo /etc/udev/rules.d/99-esata.rules
DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_SYSTEM_INTERNAL}="0"

Mude DEVPATH para o caminho da sua porta e-sata. Você pode encontrá-la usando o comando:

Código
evolucao ~ # find /sys/devices/ -name sdb
/sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb
Então recarrege as regras do udev depois de criar/editar o arquivo acima: udevadm control –reload-rules
Agora vem a má notícia: o udisks armazena vários atributos do disco, dentre eles o ”interno do sistema” e “removível“. Removível significa mídia removível (como discos óticos, leitores de cartões, etc). Interno do sistema significa que o dispositivo é “fixado” ao computador e não pode ser removido sem desligá-lo, como os discos sata. E-sata está entre as duas definições, com certeza ele não é “interno do sistema” e tecnicamente ele não é mídia removível também.
Atualmente o Solid usa o comando eject do udisk para ejetar discos e-sata, mas já que um disco e-sata não é mídia removível e o disco não foi realmente removido (desconectado da porta e-sata) o udisks emite um sinal avisando que um novo disco está disponível e o kded remonta o disco logo depois do comando de ejeção retornar (bug #277517).
Nós poderíamos usar o comando “detach” (desconectar) do udisks ao invés do comando eject, mas parece que o udisks se recusa a usá-lo com dispositivos que tenham o atributo “removable” configurado para falso, o que é o caso de discos e-sata. De qualquer forma, algumas vezes nós só queremos desmontar a partição e não desligar o disco rígido, neste caso o comando “detach” não é o mais adequado pois você precisa desligar o disco e ligá-lo novamente depois de usá-lo.
Do jeito que as coisas estão eu acho que: 1. O Solid deveria parar de usar o comando eject para partições e-sata (/dev/sdb1, /dev/sdb2, etc) e usar o comando “unmount” (desmontar). 2. Para um disco e-sata (/dev/sdb)  devemos usar o comando “detach” do udisks, mas isso só irá funcionar quando 3. alguém corrigir o udisks para permitir executar o comando “detach” em discos marcados como “não internos do sistema” e não somente para discos marcados como removíveis (lembre-se: “removable” no udisks significa mídia removível).

Nós podemos fazer o ítem No 1 já. O No 2 exige uma nova entrada no plasmoid de notificação de dispositivos para o disco inteiro (/dev/sdb) para permitir chamar o comando “detach”. O No 3 é um bug “upstream” (do udisks e não nosso) :-/

Quando eu tiver um tempo eu vou tentar resolver isso, mas por enquanto estou ocupado e com um “dead line” (prazo marcado para terminar um trabalho), então se alguém quiser assumir essa tarefa sinta-se à vontade para fazê-lo.

Leave a Comment