{"id":398859,"date":"2024-06-29T14:19:22","date_gmt":"2024-06-29T14:19:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398859"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T14:19:22","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398859","title":{"rendered":"<span>\u041f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 LTO-1 \u0441\u0442\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e iSCSI, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/j1\/ah\/l8\/j1ahl84fjm-ic0ovivbmx9jjjn8.jpeg\" alt=\"image\" align=\"right\" width=\"30%\" data-src=\"https:\/\/habrastorage.org\/webt\/j1\/ah\/l8\/j1ahl84fjm-ic0ovivbmx9jjjn8.jpeg\" data-blurred=\"true\"\/>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0435\u0440\u0438\u0438 \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u00ab\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u0435\u00bb \u043e\u0442 \u041c\u0430\u043a\u0441 \u201cFagear\u201d \u041a\u0440\u044e\u043a\u043e\u0432. \u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438, \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0441\u0442\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0441\u0442\u043e\u0438\u043b\u043e \u043d\u0435 \u043a\u0430\u043a \u043a\u0440\u044b\u043b\u043e \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430. \u0418 \u0431\u044b\u043b\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0433\u043e\u0434\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0440\u044b\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u0431\u0430\u0440\u0430\u0445\u043e\u043b\u043a\u0430\u0445, \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u0441\u0442\u0440\u0438\u043c\u0435\u0440 HP LTO-1, \u0441\u043e SCSI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0438 \u043a\u0443\u0447\u0435\u0439 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0435\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044e\u0437\u0430\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043a \u043a\u043e\u043c\u043f\u0443, \u043f\u043e\u0433\u043e\u043d\u044f\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 XP\u0448\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u043e\u0439 \u0434\u043b\u044f \u0431\u044d\u043a\u0430\u043f\u043e\u0432. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0441\u043b\u043e\u0442\u044b PCI \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u043a\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u0434\u0432\u0435 PCI \u043a\u0430\u0440\u0442\u044b \u0442\u0443\u0434\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c. \u0410 \u0443\u0431\u0438\u0440\u0430\u0442\u044c X-Fi \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 SCSI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0433\u0440\u0435\u0435\u0442\u0441\u044f, \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b \u0435\u0433\u043e \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0442\u044c, \u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0448\u0443\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0435\u0440 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u043f(\u0431\u043b\u0430\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0443\u044e\u0449\u0438\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442). \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Linux, \u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0435\u0440 \u043f\u043e iSCSI. \u0410 \u0443\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0430\u043c, \u0433\u0434\u0435 \u0448\u0443\u043c\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u043d\u043e. \u041e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 iSCSI \u0431\u044b\u043b, \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u0443\u0447\u043a\u0430 \u0438 \u0431\u0435\u0437 \u0437\u0430\u0434\u043e\u0440\u0438\u043d\u043a\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0435\u0440\u0432\u0430\u044f SCST<\/h3>\n<p>  \u0423\u0436\u0435 \u043e\u043a\u043e\u043b\u043e \u0441\u0435\u043c\u0438 \u043b\u0435\u0442 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e SCST \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u043a\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043f\u043e iSCSI. \u041f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u043a\u0443 \u0441\u0442\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u043a\u043e\u043d\u0444\u0438\u0433, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0441\u044c \u043f\u043e iSCSI, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u0436\u0438\u0437\u043d\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430. \u041d\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0443\u0441\u043f\u0435\u0445\u043e\u043c \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u043e\u0441\u044c. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 SCSI, \u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u043d\u0430\u044e. \u041d\u043e \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u044f\u0434\u0440\u0435 Linux \u044d\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0437\u0430\u0433\u0430\u0434\u043a\u0430. \u0418 \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0412 \u0446\u0435\u043b\u043e\u043c \u044f \u043e\u0442\u044b\u0441\u043a\u0430\u043b, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u043e \u0442\u0430\u043c \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u043c\u0435\u0441\u0442. \u041d\u0443 \u0438 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 SCST \u044f\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u043b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0438\u043b\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043c\u043e\u0433 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0434\u043e\u043f.\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438. \u0410 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0431\u0435\u0437 \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0435\u0449\u0451 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435.<br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u043f\u0440\u043e\u0449\u0435.<\/p>\n<h3>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u0442\u043e\u0440\u0430\u044f TGT(STGT)<\/h3>\n<p>  \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0436\u0435 SCST \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e <a href=\"http:\/\/scst.sourceforge.net\/comparison.html\" rel=\"nofollow noopener noreferrer\">\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 <\/a>\u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 iSCSI target. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 SCSI pass-through \u0431\u044b\u043b\u0430 \u0443 SCST, STGT \u0438 LIO\/TCM. SCST \u043e\u0442\u043f\u0430\u043b \u0438\u0437 \u0437\u0430 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438(\u043d\u0443 \u0438\u043b\u0438 \u043a\u0440\u0438\u0432\u044b\u0445 \u0440\u0443\u043a). \u041f\u0440\u043e LIO\/TCM \u044f \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u0441\u043b\u044b\u0448\u0430\u043b, \u0441 STGT \u0432\u0440\u043e\u0434\u0435 \u0431\u044b, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041d\u0443, \u043f\u043b\u044e\u0441 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 LIO\/TCM \u0431\u044b\u043b kernel-mode, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0431\u0430\u0433\u0430 \u0441\u0440\u0430\u0437\u0443 \u0431\u044b \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u043e \u0437\u0430\u0434\u0430\u0447\u0443. \u0410 \u0432\u043e\u0442 STGT \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e UserSpace, \u0447\u0442\u043e \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0431\u0430\u0433\u0430.<\/p>\n<p>  \u041f\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0443\u043b\u044c bs_sg, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 SG(SCSI Generic) \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0435\u043c\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0441 \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043d\u0443\u0448\u0430\u043b\u043e \u043d\u0430\u0434\u0435\u0436\u0434\u044b. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043f\u0440\u043e\u0431\u0440\u043e\u0441 SG \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<pre><code class=\"bash\">.\/tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2022-03.home.storage:storage.streamers.org .\/tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --bstype=sg --device-type=pt -b \/dev\/sg1 .\/tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u043e\u043c, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0432\u0438\u0434\u0435\u043b\u0430 \u0441\u0442\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 NTBackup \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0431\u0435\u0434\u0430!<\/p>\n<p>  \u041d\u043e \u043a\u0430\u043a \u0433\u043b\u0430\u0441\u0438\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u0431\u044d\u043a\u0430\u043f\u043e\u0432, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438. \u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043b\u0435\u043d\u0442\u0443. \u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u043b\u043e\u043c, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043c\u043e\u043b, \u043d\u0435 \u0442\u043e\u0442 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u0432\u043e\u0442\u043a\u043d\u0443\u0442, \u0438 \u0432\u044b\u043f\u043b\u0435\u0432\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dv\/ug\/9-\/dvug9-pr_gsup5bw9nidaeasjl8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/dv\/ug\/9-\/dvug9-pr_gsup5bw9nidaeasjl8.png\"\/><\/div>\n<p>   \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0441\u0442\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043a\u043e\u043c\u043f\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f. \u0412\u0435\u0440\u043d\u0443\u043b \u043d\u0430 iSCSI \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0435 \u0442\u043e\u0442 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d.<\/p>\n<h3>\u0414\u0435\u0431\u0430\u0433 \u0442\u0430\u043a \u0434\u0435\u0431\u0430\u0433<\/h3>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u0434 bs_sg.c \u0431\u044b\u043b \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u043b\u0435\u043d, \u0432\u0441\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 bsg \u0438 sg. \u0421\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u0431\u044b\u043b\u043e \u0434\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">static int bs_sg_cmd_submit(struct scsi_cmd *cmd) static void bs_sg_cmd_complete(int fd, int events, void *data) <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u0435\u0451 SG \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0432\u0448\u0435\u043c\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0438\u0437 \u0432\u0438\u043d\u0434\u044b \u0441\u043b\u0430\u0442\u044c SCSI \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438 \u043a\u0430\u043a \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043b\u0438\u043d\u0443\u043a\u0441\u0430 \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0412 \u0432\u0438\u043d\u0434\u0435 \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 SPTI(\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432 XP \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043a\u0430 \u0431\u044b\u043b\u043e \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e). \u041a\u0430\u043a \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 RSDN <a href=\"https:\/\/rsdn.org\/article\/baseserv\/SCSI.xml\" rel=\"nofollow noopener noreferrer\">\u0423\u043a\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043f\u0442\u0438\u0432\u043e\u0433\u043e\u2026 CD-ROM<\/a>. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 SG \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/russianblogs.com\/article\/6172955920\/\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439, \u0434\u0435\u0431\u0430\u0433\u0435\u0440 \u0432\u0435\u0449\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u043e \u0442\u0443\u0442 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 printf. \u0425\u043e\u0442\u044f \u0431\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044f bs_sg_cmd_complete \u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u0447\u0442\u043e \u043f\u043e\u0441\u044b\u043b\u0430\u043b\u0438 SG \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u0438 \u0447\u0442\u043e \u043e\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u043b\u043e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">static void bs_sg_cmd_complete(int fd, int events, void *data) {     struct sg_io_hdr io_hdr;     struct scsi_cmd *cmd;     int err;     uint32_t actual_len;      memset(&amp;io_hdr, 0, sizeof(io_hdr));     io_hdr.interface_id = 'S';     io_hdr.pack_id = -1;      err = graceful_read(fd, &amp;io_hdr, sizeof(io_hdr));     if (err)         return;      cmd = (struct scsi_cmd *)io_hdr.usr_ptr;      printf(\"CDB:\");     for(uint8_t i=0; i &lt; cmd->scb_len; i++){         printf(\"%02X \", cmd->scb[i]);     }      printf(\"STATUS: %02X, LEN: %02X \", io_hdr.status, io_hdr.dxfer_len - io_hdr.resid);      printf(\"SENS[%d]:\", io_hdr.sb_len_wr);     for(uint8_t i=0; i&lt;io_hdr.sb_len_wr; i++){         printf(\"%02X \", io_hdr.sbp[i]);     }     printf(\"\\r\\n\");      if (!io_hdr.status) {         actual_len = io_hdr.dxfer_len - io_hdr.resid;     } else {         \/* NO SENSE | ILI (Incorrect Length Indicator) *\/         if (io_hdr.sbp[2] == 0x20)             actual_len = io_hdr.dxfer_len - io_hdr.resid;         else             actual_len = 0;          cmd->sense_len = io_hdr.sb_len_wr;      }       if (!actual_len || io_hdr.resid) {         if (io_hdr.dxfer_direction == SG_DXFER_TO_DEV)             scsi_set_out_resid_by_actual(cmd, actual_len);         else             scsi_set_in_resid_by_actual(cmd, actual_len);     }      target_cmd_io_done(cmd, io_hdr.status); }    <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u0435\u043d\u0442\u044b \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043b\u043e\u0433(\u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b check condition(0x00)):<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041b\u043e\u0433 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\"><code>CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1B 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1E 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:1A 00 10 00 1C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 1C SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1A 08 10 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:1A 08 0F 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 06 SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:15 10 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:1A 08 10 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:1A 08 0F 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 06 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:1A 08 10 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:1A 08 0F 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 06 SENS[0]:<br \/>  CDB:1A 08 10 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:1A 08 0F 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 06 SENS[0]:<br \/>  CDB:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:08 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 02, LEN: 400 SENS[22]:F0 00 80 00 00 01 FE 0E 00 00 00 00 00 01 00 00 30 21 00 00 00 00<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:1A 08 10 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:1A 08 0F 00 14 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 14 SENS[0]:<br \/>  CDB:05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 06 SENS[0]:<br \/>  CDB:1A 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:15 10 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 0C SENS[0]:<br \/>  CDB:01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:4D 00 31 00 00 00 00 00 3C 00 00 00 00 00 00 00 STATUS: 00, LEN: 24 SENS[0]:<br \/>  CDB:1A 00 10 00 1C 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 1C SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:03 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 16 SENS[0]:<br \/>  CDB:1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<br \/>  CDB:1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 00, LEN: 00 SENS[0]:<\/code>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 CDB \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 SCSI \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/SCSI_command\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>  <code>00h GOOD<br \/>  02h CHECK CONDITION<br \/>  04h CONDITION MET<br \/>  08h BUSY<br \/>  18h RESERVATION CONFLICT<br \/>  28h TASK SET FULL<br \/>  30h ACA ACTIVE<br \/>  40h TASK ABORTED<br \/>  <\/code><br \/>  SENS \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043e\u0448\u0438\u0431\u043a\u0435 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<br \/>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u043e\u0441\u044f\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0447\u0442\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a, \u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u0430 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0430, \u0438\u0442\u0434.<\/p>\n<p>  \u0418 \u0432\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u0440\u043e\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b 08 (READ(6)). \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u0432\u0438\u043d\u0434\u044b. \u041f\u043b\u044e\u0441 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0442\u043e-\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u044b. \u041d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0443:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\"><code>#include &lt;stdio.h><br \/>  #include &lt;stdlib.h><br \/>  #include &lt;windows.h><br \/>  #include &lt;winioctl.h><br \/>  #include &lt;ntddscsi.h><\/p>\n<p>  #define SPT_CDB_LENGTH 32<br \/>  #define SPT_SENSE_LENGTH 32<br \/>  #define SPTWB_DATA_LENGTH 32768<\/p>\n<p>  #define offsetof(st, m) \\<br \/>   ((size_t)&amp;(((st *)0)->m))<\/p>\n<p>  #pragma pack(push, mode_params, 1)<br \/>  typedef struct _MODE_PARAMETER_HEADER {<br \/>   UCHAR ModeDataLength;<br \/>   UCHAR MediumType;<br \/>   UCHAR DeviceSpecificParameter;<br \/>   UCHAR BlockDescriptorLength;<br \/>  }MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;<br \/>  #pragma pack(pop, mode_params)<\/p>\n<p>  #pragma pack(push, mode_params_block, 1)<br \/>  typedef struct _MODE_PARAMETER_BLOCK {<br \/>   UCHAR DensityCode;<br \/>   UCHAR NumberOfBlocks[3];<br \/>   UCHAR Reserved;<br \/>   UCHAR BlockLength[3];<br \/>  }MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;<br \/>  #pragma pack(pop, mode_params_block)<\/p>\n<p>  typedef struct _MODE_DEVICE_CONFIGURATION_PAGE {<\/p>\n<p>  UCHAR PageCode : 6;<br \/>   UCHAR Reserved1 : 1;<br \/>   UCHAR PS : 1;<br \/>   UCHAR PageLength;<br \/>   UCHAR ActiveFormat : 5;<br \/>   UCHAR CAFBit : 1;<br \/>   UCHAR CAPBit : 1;<br \/>   UCHAR Reserved2 : 1;<br \/>   UCHAR ActivePartition;<br \/>   UCHAR WriteBufferFullRatio;<br \/>   UCHAR ReadBufferEmptyRatio;<br \/>   UCHAR WriteDelayTime[2];<br \/>   UCHAR REW : 1;<br \/>   UCHAR RBO : 1;<br \/>   UCHAR SOCF : 2;<br \/>   UCHAR AVC : 1;<br \/>   UCHAR RSmk : 1;<br \/>   UCHAR BIS : 1;<br \/>   UCHAR DBR : 1;<br \/>   UCHAR GapSize;<br \/>   UCHAR Reserved3 : 3;<br \/>   UCHAR SEW : 1;<br \/>   UCHAR EEG : 1;<br \/>   UCHAR EODdefined : 3;<br \/>   UCHAR BufferSize[3];<br \/>   UCHAR DCAlgorithm;<br \/>   UCHAR Reserved4;<\/p>\n<p>  } MODE_DEVICE_CONFIGURATION_PAGE, *PMODE_DEVICE_CONFIGURATION_PAGE;<\/p>\n<p>  typedef struct _MODE_DEVICE_CONFIG_PAGE_PLUS {<\/p>\n<p>  MODE_PARAMETER_HEADER ParameterListHeader;<br \/>   MODE_PARAMETER_BLOCK ParameterListBlock;<br \/>   MODE_DEVICE_CONFIGURATION_PAGE DeviceConfigPage;<\/p>\n<p>  } MODE_DEVICE_CONFIG_PAGE_PLUS, *PMODE_DEVICE_CONFIG_PAGE_PLUS ;<\/p>\n<p>  typedef struct _SCSI_PASS_THROUGH_WITH_BUFFERS {<br \/>   SCSI_PASS_THROUGH spt;<br \/>   ULONG Filler; \/\/ realign buffers to double word boundary<br \/>   UCHAR ucSenseBuf[SPT_SENSE_LENGTH];<br \/>   UCHAR ucDataBuf[SPTWB_DATA_LENGTH];<br \/>   } SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS;<\/p>\n<p>  SCSI_PASS_THROUGH_WITH_BUFFERS spti;<br \/>  SCSI_INQUIRY_DATA inq;<br \/>  int main(){<br \/>   ULONG length = 0,<br \/>   errorCode = 0,<br \/>   returned = 0,<br \/>   sectorSize = 512;<br \/>   BOOL status = 0;<br \/>   int i;<br \/>   HANDLE x;<br \/>   PMODE_DEVICE_CONFIG_PAGE_PLUS configInformation;<\/p>\n<p>  FILE * file;<br \/>   x = CreateFileA(\"\\\\\\\\.\\\\tape0\",<br \/>   GENERIC_WRITE | GENERIC_READ,<br \/>   FILE_SHARE_READ | FILE_SHARE_WRITE,<br \/>   NULL, OPEN_EXISTING, 0 , NULL);<\/p>\n<p>  ZeroMemory(&amp;spti,sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS));<br \/>   spti.spt.Length = sizeof(SCSI_PASS_THROUGH);<br \/>   spti.spt.PathId = 0;<br \/>   spti.spt.TargetId = 1;<br \/>   spti.spt.Lun = 0;<br \/>   spti.spt.CdbLength = 6;<br \/>   spti.spt.SenseInfoLength = SPT_SENSE_LENGTH;<br \/>   spti.spt.DataIn = SCSI_IOCTL_DATA_IN;<br \/>   spti.spt.DataTransferLength = 0x200;\/\/sizeof(spti.ucDataBuf);<br \/>   spti.spt.TimeOutValue = 2;<br \/>   spti.spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucDataBuf);<br \/>   spti.spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucSenseBuf);<br \/>   spti.spt.Cdb[0] = 0x08;<br \/>   spti.spt.Cdb[1] = 0x01;<br \/>   spti.spt.Cdb[2] = 0x00;<br \/>   spti.spt.Cdb[3] = 0x02;<br \/>   spti.spt.Cdb[4] = 0x00;<br \/>   spti.spt.Cdb[5] = 0x00;<\/p>\n<p>  length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucDataBuf) + spti.spt.DataTransferLength;<br \/>   memset(spti.ucSenseBuf, 0xFF, sizeof(spti.ucSenseBuf));\\<br \/>   status = DeviceIoControl(x, IOCTL_SCSI_PASS_THROUGH,<br \/>   &amp;spti,<br \/>   sizeof(SCSI_PASS_THROUGH),<br \/>   &amp;spti,<br \/>   length,<br \/>   &amp;returned,<br \/>   FALSE);<\/p>\n<p>  printf(\"STATUS: %d[%02X]\\r\\n\", status, spti.spt.ScsiStatus);<\/p>\n<p>  printf(\"DATA[%d]:\", spti.spt.DataTransferLength);<br \/>   for(i=0; i&lt;spti.spt.DataTransferLength &amp;&amp; i &lt; 15; i++){<br \/>   printf(\"%02X \", spti.ucDataBuf[i]);<br \/>   }<br \/>   printf(\"\\r\\n\");<\/p>\n<p>  printf(\"SENS[%d]:\", spti.spt.SenseInfoLength);<br \/>   for(i=0; i&lt;spti.spt.SenseInfoLength; i++){<br \/>   printf(\"%02X \", spti.ucSenseBuf[i]);<br \/>   }<br \/>   printf(\"\\r\\n\");<\/p>\n<p>   return 0;<br \/>  }<br \/>  <\/code>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0438 \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <code>STATUS: 1[02]<br \/>  DATA[0]:<br \/>  SENS[22]:70 00 05 00 00 00 00 0E 00 00 00 00 24 00 00 C8 00 01 00 00 00 00<\/code><br \/>  \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043e\u043c:<br \/>  <code>CDB:08 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 STATUS: 02, LEN: 400 SENS[22]:F0 00 80 00 00 01 FE 0E 00 00 00 00 00 01 00 00 30 21 00 00 00 00<br \/>  <\/code><br \/>  \u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442, SENS \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442. \u041d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 SG \u043e\u043d \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u043b 0x400 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 SPTI \u043d\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0439, \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043a\u0442\u043e \u043d\u0430 \u044d\u0442\u043e \u043c\u043e\u0433 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c. \u0418 \u0432\u0438\u0434\u0438\u043c \u043a\u0443\u0441\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">    if (!io_hdr.status) {         actual_len = io_hdr.dxfer_len - io_hdr.resid;     } else {         \/* NO SENSE | ILI (Incorrect Length Indicator) *\/         if (io_hdr.sbp[2] == 0x20)             actual_len = io_hdr.dxfer_len - io_hdr.resid;         else             actual_len = 0;           cmd->sense_len = io_hdr.sb_len_wr;      } <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 GOOD \u0442\u043e \u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043d\u0430\u043c \u0432\u0435\u0440\u043d\u0443\u043b SG, \u0435\u0441\u043b\u0438 \u0436\u0435 \u043d\u0435\u0442 \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0431\u0430\u0439\u0442 SENS \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 0x20. \u0418 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a \u0442\u043e \u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 SG, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c 0. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438 \u0432\u0438\u0434\u0438\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0431\u0430\u0439\u0442 \u0443 \u043d\u0430\u0441 0x80 \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0437\u043d\u0430\u0447\u0430\u0442 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0446\u0438\u0444\u0435\u0440\u043a\u0438 \u0432 SENS. \u0421\u0430\u043c\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435, \u0447\u0442\u043e \u044f \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438, \u044d\u0442\u043e \u0431\u044b\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0442 Oracle \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b LTO5(\u043e \u043d\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0437\u0436\u0435) \u0441\u0442\u0440\u0438\u043c\u0435\u0440\u0430 <a href=\"https:\/\/docs.oracle.com\/cd\/E21419_04\/en\/LTO5_Vol3_E5b\/LTO5_Vol3_E5b.pdf\" rel=\"nofollow noopener noreferrer\">docs.oracle.com\/cd\/E21419_04\/en\/LTO5_Vol3_E5b\/LTO5_Vol3_E5b.pdf<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/in\/x3\/5c\/inx35c9k9bstybsx77nexslmvgm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/in\/x3\/5c\/inx35c9k9bstybsx77nexslmvgm.png\"\/><\/p>\n<p>  \u0418 \u0442\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0442\u0440\u0438 \u0444\u043b\u0430\u0433\u0430:<br \/>  <code>Mark(\u0438\u043b\u0438 FMK) - \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430 \u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043a\u043e\u043d\u0446\u0430 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  EOM - \u041c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f<br \/>  ILI - \u041c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435 1024 \u0431\u0430\u0439\u0442, \u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e 512 \u0431\u0430\u0439\u0442.<\/code><br \/>  \u0418 \u043f\u043e\u043b\u044f SENS CODE \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u0435\u0442 \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u043e \u00ab0\u00bb, \u0447\u0442\u043e \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/eo\/tg\/u6\/eotgu6p4no0fb-frvocl4tvjeiq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/eo\/tg\/u6\/eotgu6p4no0fb-frvocl4tvjeiq.png\"\/><\/p>\n<p>  \u0418 \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f\u0432\u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u0444\u043b\u0430\u0433 FMK\/EOM \u043e\u043d \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 SENS CODE \u0442\u043e\u0436\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0418 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0443\u0442 \u0434\u0435\u043b\u0430\u0435\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043a\u0430\u043a\u0443\u044e \u0442\u043e \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443. \u0418\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0442, \u043a\u0442\u043e \u043f\u0438\u0441\u0430\u043b \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u044d\u0442\u0438\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438. \u041d\u043e \u043f\u043e \u043c\u043d\u0435 \u043a\u043e\u0434 \u0434\u0435\u043b\u0430\u043b \u043b\u0438\u0448\u043d\u044e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0438 \u0438\u0441\u043a\u0430\u0436\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 SG \u0438 iSCSI.<\/p>\n<p>  \u041c\u0435\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a:<\/p>\n<p>  <code>actual_len = io_hdr.dxfer_len - io_hdr.resid;<br \/>   cmd->sense_len = io_hdr.sb_len_wr;<\/code><br \/>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qy\/s8\/fq\/qys8fqec9nxcpidkepsfrtgxnfk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qy\/s8\/fq\/qys8fqec9nxcpidkepsfrtgxnfk.png\"\/><\/div>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u0445\u044d\u0448 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043e\u043c. \u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u043e\u0442\u0434\u0430\u0442\u044c \u043f\u0430\u0442\u0447 \u043d\u0430\u0437\u0430\u0434 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441. \u041c\u043e\u0436\u0435\u0442, \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u041d\u0443 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0431\u044b\u043b\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0433\u0438\u0442\u0445\u0430\u0431. \u0417\u0430\u0441\u043b\u0430\u0442\u044c \u043f\u0443\u043b\u043b \u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0430\u0432\u0442\u043e\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0422\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u041a\u0430\u043a \u043d\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0443\u0436\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u043f\u0430\u0442\u0447 \u0431\u044b\u043b <a href=\"https:\/\/github.com\/fujita\/tgt\/pull\/48\" rel=\"nofollow noopener noreferrer\">\u043f\u0440\u0438\u043d\u044f\u0442<\/a>, \u0438 \u0441\u043c\u0435\u0440\u0436\u0435\u043d \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0430\u044f, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u043a\u0430 SCSI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 iSCSI \u0441\u0442\u0430\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439.<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/657691\/\"> https:\/\/habr.com\/ru\/articles\/657691\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/j1\/ah\/l8\/j1ahl84fjm-ic0ovivbmx9jjjn8.jpeg\" alt=\"image\" align=\"right\" width=\"30%\" data-src=\"https:\/\/habrastorage.org\/webt\/j1\/ah\/l8\/j1ahl84fjm-ic0ovivbmx9jjjn8.jpeg\" data-blurred=\"true\"\/>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0435\u0440\u0438\u0438 \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u00ab\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u0435\u00bb \u043e\u0442 \u041c\u0430\u043a\u0441 \u201cFagear\u201d \u041a\u0440\u044e\u043a\u043e\u0432. \u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438, \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0441\u0442\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0441\u0442\u043e\u0438\u043b\u043e \u043d\u0435 \u043a\u0430\u043a \u043a\u0440\u044b\u043b\u043e \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430. \u0418 \u0431\u044b\u043b\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0433\u043e\u0434\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0440\u044b\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u0431\u0430\u0440\u0430\u0445\u043e\u043b\u043a\u0430\u0445, \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u0441\u0442\u0440\u0438\u043c\u0435\u0440 HP LTO-1, \u0441\u043e SCSI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0438 \u043a\u0443\u0447\u0435\u0439 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0435\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044e\u0437\u0430\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043a \u043a\u043e\u043c\u043f\u0443, \u043f\u043e\u0433\u043e\u043d\u044f\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 XP\u0448\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u043e\u0439 \u0434\u043b\u044f \u0431\u044d\u043a\u0430\u043f\u043e\u0432. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0441\u043b\u043e\u0442\u044b PCI \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u043a\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u0434\u0432\u0435 PCI \u043a\u0430\u0440\u0442\u044b \u0442\u0443\u0434\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c. \u0410 \u0443\u0431\u0438\u0440\u0430\u0442\u044c X-Fi \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 SCSI \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0433\u0440\u0435\u0435\u0442\u0441\u044f, \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b \u0435\u0433\u043e \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0442\u044c, \u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0448\u0443\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0435\u0440 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u043f(\u0431\u043b\u0430\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0443\u044e\u0449\u0438\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442). \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Linux, \u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c\u0435\u0440 \u043f\u043e iSCSI. \u0410 \u0443\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0430\u043c, \u0433\u0434\u0435 \u0448\u0443\u043c\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u043d\u043e. \u041e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 iSCSI \u0431\u044b\u043b, \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u0443\u0447\u043a\u0430 \u0438 \u0431\u0435\u0437 \u0437\u0430\u0434\u043e\u0440\u0438\u043d\u043a\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398859","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=398859"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398859\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}