|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Barabanov 2:5020/400 25 Nov 2006 18:30:51 To : Sergey Vlasov Subject : Re: usb disk отправить в сон -------------------------------------------------------------------------------- Sergey Vlasov wrote: > Это я немного наврал - команду я смотрел внутри ядра (причём, > естественно, 2.6), а на самом деле надо было вызывать просто eject без > опции -s: > > # eject -v /dev/sdb > eject: device name is `/dev/sdb' > eject: expanded name is `/dev/sdb' > eject: `/dev/sdb' is not mounted > eject: `/dev/sdb' is not a mount point > eject: `/dev/sdb' is a multipartition device > eject: trying to eject `/dev/sdb' using CD-ROM eject command > eject: CD-ROM eject command succeeded > > По ioctl(fd, CDROMEJECT) 2.6 делает то, что нужно в данном случае. > > С опцией -s не работает и на 2.6: > > # eject -sv /dev/sdb > eject: device name is `/dev/sdb' > eject: expanded name is `/dev/sdb' > eject: `/dev/sdb' is not mounted > eject: `/dev/sdb' is not a mount point > eject: `/dev/sdb' is a multipartition device > eject: trying to eject `/dev/sdb' using SCSI commands > eject: SCSI eject failed > eject: unable to eject, last error: No such file or directory > > Проблема в том, что eject -s делает слишком много лишнего: > > /* > * Eject using SCSI commands. Return 1 if successful, 0 otherwise. > */ > static int EjectScsi(int fd) > { > int status; > struct sdata { > int inlen; > int outlen; > char cmd[256]; > } scsi_cmd; > > scsi_cmd.inlen = 0; > scsi_cmd.outlen = 0; > scsi_cmd.cmd[0] = ALLOW_MEDIUM_REMOVAL; > scsi_cmd.cmd[1] = 0; > scsi_cmd.cmd[2] = 0; > scsi_cmd.cmd[3] = 0; > scsi_cmd.cmd[4] = 0; > scsi_cmd.cmd[5] = 0; > status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd); > if (status != 0) > return 0; > > scsi_cmd.inlen = 0; > scsi_cmd.outlen = 0; > scsi_cmd.cmd[0] = START_STOP; > scsi_cmd.cmd[1] = 0; > scsi_cmd.cmd[2] = 0; > scsi_cmd.cmd[3] = 0; > scsi_cmd.cmd[4] = 1; > scsi_cmd.cmd[5] = 0; > status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd); > if (status != 0) > return 0; > > scsi_cmd.inlen = 0; > scsi_cmd.outlen = 0; > scsi_cmd.cmd[0] = START_STOP; > scsi_cmd.cmd[1] = 0; > scsi_cmd.cmd[2] = 0; > scsi_cmd.cmd[3] = 0; > scsi_cmd.cmd[4] = 2; > scsi_cmd.cmd[5] = 0; > status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd); > if (status != 0) > return 0; > > /* force kernel to reread partition table when new disc inserted */ > status = ioctl(fd, BLKRRPART); > return (status == 0); > } > > В случае PL2507 не проходит команда ALLOW_MEDIUM_REMOVAL, после чего > всё и обваливается. Первый START_STOP тоже лишний (хотя и проходит); > BLKRRPART тоже мешает, поскольку запускает диск. Без -s еще хуже. server:/var/log # eject -v /dev/sda eject: device name is `/dev/sda' eject: expanded name is `/dev/sda' eject: `/dev/sda' is not mounted eject: `/dev/sda' is not a mount point eject: `/dev/sda' is a multipartition device eject: trying to eject `/dev/sda' using CD-ROM eject command eject: CD-ROM eject command failed eject: trying to eject `/dev/sda' using SCSI commands eject: SCSI eject failed eject: trying to eject `/dev/sda' using floppy eject command eject: floppy eject command failed eject: trying to eject `/dev/sda' using tape offline command eject: tape offline command failed eject: unable to eject, last error: Invalid argument server:/var/log # А принудительно эжектить как СиДи тоже не приводит к успеху server:/var/log # eject -vr /dev/sda eject: device name is `/dev/sda' eject: expanded name is `/dev/sda' eject: `/dev/sda' is not mounted eject: `/dev/sda' is not a mount point eject: `/dev/sda' is a multipartition device eject: trying to eject `/dev/sda' using CD-ROM eject command eject: CD-ROM eject command failed eject: unable to eject, last error: Invalid argument server:/var/log # Hо ядро 2.4. Hа 2.6 пока (до конца вечера) проверить не могу. -- Bye. Aleksey Barabanov <alekseybb at mail.ru> Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: home (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/78249f2a36d9.html, оценка из 5, голосов 10
|