The ministers agreed by a large majority to the plan with just four EU members — Czech Republic, Hungary, Romania and Slovakia — voting against it.
The UN and other international organizations warned it was the "last chance" for increasingly overwhelmed European states to agree on how to cope with the tide of people fleeing conflict in countries like Syria, Afghanistan.
Luxembourg Foreign Minister Jean Asselborn, who is chairing the meeting, said: "We have a text on the table which should deliver an agreement. It is very balanced. I think it will have a good influence on all the delegations so we can reach a result this evening."
Spain has previously said it would accept 15,000 Syrian refugees after facing pressure from the population to do more for those fleeing war. Initially Spain had rejected the EU quota and said it would welcome less than 2,500 people.
But central and eastern European states strongly resisted plans to force EU member countries to take a share of the new arrivals from front-line nations.
"I want to confirm that both the interior minister and myself... will unequivocally reject any effort to introduce a permanent mechanism of refugee redistribution," Czech Prime Minister Sobotka told reporters in Prague.
"We also reject the introduction of quotas," he added.
The deal could be ratified by European Union leaders at a crisis summit on Wednesday, which will focus on wider issues of strengthening the bloc's external borders.
Tensions have kept boiling over, with fears that the EU's Schengen passport-free zone could be under threat from the tide of migrants, many of whom are trying to make their way to Germany.
German Interior Minister Thomas de Maziere, whose country is set to take in around one million asylum seekers this year, previously said he was "optimistic" that they could reach a deal but warned that the talks would be difficult.
"In the end I am optimistic but it's not done yet," he said.