Since only one drive gives you a flashing ? when mounted internally, you've pretty much ruled out hardware failure of the controller and the cabling.
I would first try booting into the start up manager by holding the option key with the problematic drive on the internal bus. The ? can come up when the startup disk settings in NVRAM don't match the drive, but if any drive connected is bootable, it should show when you boot with option held down.
Your next step after making sure it's not startup disk settings would be to erase that drive entirely and try reinstalling OS X onto it. You could flip a coin and decide to do the installation internally or externally.
Start up the computer holding the option key, which takes you to the Startup manager; that will show you your boot options. It should show at least the recovery hd, possibly even the main drive. If the main drive is an option, select it, then before hitting enter, hold down both the Cmd key and the "S" key. That will boot you into single user mode, which should allow you to access the drive unhindered, outside of OS X.
A black screen will appear, followed by a bunch of text. At the end of the scrolling, follow the instructions listed.
At the prompt type the following then hit enter:
/sbin/fsck -fy
If there are errors, it will say the file system appears ok, but then there will be "the file system has been modified". If so, repeat the command until it just says the file system is ok.
Then at the command prompt, run
/sbin/mount -uw /
This mounts the root drive as writeable, and will remove damaged or unnecessary files. It may or may not tell you that some files have been removed. Regardless, at the next prompt, run reboot
. Allow the system to restart unhindered. It may boot up into the main drive on its own then. If not, it will boot back into recovery, but you may have better luck in recovery now after repairing first in single user.
Best Answer
You should be able to do this with
dd
by setting Removable to False.Unmount your disk, then run…
Don't forget to replace
disk2
with the actual disk identifier. This command will erase the contents of the disk. Untested, be careful, usual 'not responsible if stuff goes wrong' applies :)